This site requires JavaScript, please enable it in your browser!
Greenfoot back
JackVolp5
JackVolp5 wrote ...

2019/2/24

How do I stop some actors from passing through other actors?

JackVolp5 JackVolp5

2019/2/24

#
In my game, I would like to add clipping to some objects in my world so that the player cannot pass through them. Here is my code for the player, the objects I would like to add clipping to are empty aside from the act method.
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.concurrent.TimeUnit;

public class player extends Actor
{
    long lastBullet = System.currentTimeMillis();
    GreenfootSound gunshot = new GreenfootSound("gunshot.wav");
    
    public static int healthP1=100;
    public player()
    {
        healthP1 = 100;               
    }
    public void act() 
    {
       movement();
       checkShot();
       getWorld().showText("health Player 1: "+healthP1, 100, 500);
       if(healthP1<=0)
       {
           getWorld().showText("Player 2 Wins!",640,360);
           getWorld().removeObject(this);
       }
    }
    public void movement()
    {
        int playerX = this.getX();
        int playerY = this.getY();
        
        if(Greenfoot.isKeyDown("w") && Greenfoot.isKeyDown("d"))
        {
            setLocation(playerX+5,playerY-5);
        }
        else if(Greenfoot.isKeyDown("w") && Greenfoot.isKeyDown("a"))
        {
            setLocation(playerX-5,playerY-5);
        }
        else if(Greenfoot.isKeyDown("s") && Greenfoot.isKeyDown("a"))
        {
            setLocation(playerX-5,playerY+5);
        }
        else if(Greenfoot.isKeyDown("s") && Greenfoot.isKeyDown("d"))
        {
            setLocation(playerX+5,playerY+5);
        }
        else if(Greenfoot.isKeyDown("a"))
        {
             setLocation(playerX-5,playerY);
        }
        else if(Greenfoot.isKeyDown("d"))
        {
            setLocation(playerX+5,playerY);
        }
        else if(Greenfoot.isKeyDown("w"))
        {
            setLocation(playerX,playerY-5);
        }
        else if(Greenfoot.isKeyDown("s"))
        {
           setLocation(playerX,playerY+5);
        }
        
    }
    public void checkShot()
    {
        long currentTime = System.currentTimeMillis();
        
        if(Greenfoot.isKeyDown("space") && currentTime >= lastBullet+600)
        {
            gunshot.play();
            getWorld().addObject(new Bullet(),getX(),getY());
            lastBullet=currentTime;
        }
    }
    
    
}
danpost danpost

2019/2/25

#
Split horizontal movement from vertical movement. Determine direction along an axis to move before moving. Then apply the 3-step process of move, check for intersectors and move back if any found.
You need to login to post a reply.