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

2023/9/3

Need Help with Collision

Outis Outis

2023/9/3

#
So Basically I need help creating making my Actor/Mario stop when it hits a wall/Ground, I need Mario to stop no matter what axis he runs into it. I have Done many methods but none seem to work. I have no code for the Ground witch is named BlockStrip. Here is Mario's code:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Mario here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Mario extends Actor
{
    private int moveSpeed = 2;
    private int vSpeed = 2;
    private int acceleration = 1/3;
    private int apexTimer;
    private int GRAVITY = 1;
    static final int JUMP_FORCE = 12;
    int xSpeed = 4;
    int ySpeed = 0;
    /**
     * Act - do whatever the Mario wants to do. This method is called whenever
     */
    public void act()
    {
        checkKeys();
        moveHorizontal();
        moveVertically();
}
public void moveHorizontal()
    {   
        int worldWidth = getWorld().getWidth();
        int myWidth = getImage().getWidth();
        int dx = 0;
        if(Greenfoot.isKeyDown("a")) dx--;
        if(Greenfoot.isKeyDown("d")) dx++;
        
        setLocation(getX()+dx*xSpeed, getY());
    }
    private void moveVertically()
    {
        int worldHeight=getWorld().getHeight();
        int myHeight=getImage().getHeight();
        boolean onGround = false;
        ySpeed+=GRAVITY;
        setLocation(getX(),getY()+ySpeed);
        if(getY() > worldHeight-myHeight/2)
        {
            ySpeed = 0;
            onGround = true;
        }
        
        if(onGround && Greenfoot.isKeyDown("space")) 
        {
            ySpeed =-JUMP_FORCE;
        }
}
private void checkKeys()
        {
{
        {
    if (Greenfoot.isKeyDown ("right") || Greenfoot.isKeyDown ("d"))
        {
            setImage("Mario.png");
        }
    {
    if (Greenfoot.isKeyDown ("left") || Greenfoot.isKeyDown ("a"))
        {
            setImage("MarioBack.png");
        }
    }
    }
}
}
}
danpost danpost

2023/9/4

#
Basically, after moving, if an obstacle is touched, then move back. For example, after line 36, which moves Mario horizontally:
if (isTouching(Actor.class)) {
    setLocation(getX()-dx*xSpeed, getY());
} A bit more is involved when moving vertically when gravity is in play. See what you can do with it.
You need to login to post a reply.