It moves left just fine but suddenly it sops moving right at places like the edge or on top a platform. ( I just started greenfoot and this is partially from a tutorial so it might just be a dumb mistake im not seeing)
import greenfoot.*; /** * Write a description of class guineaPig here. * * @author (your name) * @version (a version number or a date) */ public class guineaPig extends Actor { private final int gravity =1; private int velocity; private int imageNumber; coin coin; /** * Act - do whatever the guineaPig wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ public void act() { // Add your action code here. fall(); if(Greenfoot.isKeyDown("space") && isOnSolidGround()) jump(); move(); lvlChange1(); hit(); } public void hit(){ if( isTouchingSpike() ) { setLocation(60, 500); } } public void Jumper(){ velocity = 0; } public void fall(){ setLocation(getX(), getY() + velocity); if(isOnSolidGround()) {velocity = 0; while(isOnSolidGround()){ setLocation(getX(), getY() -1); } setLocation(getX(), getY() +1); } else if( velocity< 0 && didBumpHead()) velocity =0; else velocity += gravity; } public void jump(){ velocity = -20; } public void move() { int y = getY(); int x = getX(); if(Greenfoot.isKeyDown("left") && canMoveLeft()) { imageNumber = 1; changeImage(); x -=9; } else if(Greenfoot.isKeyDown("right") && canMoveRight()) { imageNumber = 0; changeImage(); x +=9; } setLocation(x,y); } public void lvlChange1(){ if(getWorld() instanceof level1 && coin.score == 4){ if(isAtEdge()&& getX()>700 && getY() > 500){ Greenfoot.setWorld(new level2());} } } public boolean isOnSolidGround(){ boolean isOnGround = false; int imageWidth = getImage().getWidth(); int imageHeight = getImage().getHeight(); if(getOneObjectAtOffset(imageWidth /-2 , imageHeight /2,ground.class) !=null || getOneObjectAtOffset(imageWidth /2 , imageHeight /2 -1,ground.class) !=null) isOnGround = true; return isOnGround; } public boolean isTouchingSpike(){ boolean touchingSpike = false; if(getOneObjectAtOffset(0, 0, spike.class) !=null){ touchingSpike = true;} return touchingSpike; } public boolean didBumpHead(){ boolean bumpedHead = false; int imageWidth = getImage().getWidth(); int imageHeight = getImage().getHeight(); if(getOneObjectAtOffset(imageWidth /-2, imageHeight /-2,ground.class) !=null || getOneObjectAtOffset(imageWidth /2, imageHeight /-2,ground.class) !=null) bumpedHead = true; return bumpedHead; } public boolean canMoveLeft(){ boolean canMoveLeft = true; int imageWidth = getImage().getWidth(); int imageHeight = getImage().getHeight(); if(getOneObjectAtOffset(imageWidth / -2 - 9, imageHeight / -2 ,ground.class) !=null || getOneObjectAtOffset(imageWidth /-2 -9, imageHeight /2 - 1,ground.class) !=null) canMoveLeft = false; return canMoveLeft; } public boolean canMoveRight(){ boolean canMoveRight = true; int imageWidth = getImage().getWidth(); int imageHeight = getImage().getHeight(); if(getOneObjectAtOffset(imageWidth / 2 +9, imageHeight / -2 ,ground.class) !=null || getOneObjectAtOffset(imageWidth /2 + 9, imageHeight /2 - 1,ground.class) !=null) canMoveRight = false; return canMoveRight; } public void changeImage(){ if(imageNumber == 0){ setImage("guineaRight.png"); } if(imageNumber == 1){ setImage("guineaLeft.png"); } } }