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

2013/3/15

Need help in terms of stopping the actor going through the walls

Blakehammond Blakehammond

2013/3/15

#
This is my actors coding so far. import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) /** * Write a description of class Dom here. * * @author (your name) * @version (a version number or a date) */ public class Dom extends Mover { private int speed=5; public Dom() { } public void act() { checkKeys(); } private void checkKeys(){ if(Greenfoot.isKeyDown("left")&&!CaveLeft()){ moveLeft(); } if(Greenfoot.isKeyDown("right")&&!CaveRight()){ moveRight(); } if(Greenfoot.isKeyDown("up")&&!CaveUp()){ moveUp(); } if(Greenfoot.isKeyDown("down")&&!CaveDown()){ moveDown(); } } public void moveRight(){ setLocation(getX()+speed,getY()); } public void moveLeft(){ setLocation(getX()-speed,getY()); } public void moveUp(){ setLocation(getX(),getY() -speed); } public void moveDown(){ setLocation(getX(),getY() +speed); } public boolean canSee(Class clss){ Actor actor = getOneIntersectingObject(clss); return actor != null; } public boolean CaveRight(){ Cave a = (Cave) getOneObjectAtOffset(20,-25,Cave.class); return a !=null; } public boolean CaveLeft(){ Cave a = (Cave) getOneObjectAtOffset(-25,20,Cave.class); return a !=null; } public boolean CaveUp(){ Cave a = (Cave) getOneObjectAtOffset(25,-20,Cave.class); return a !=null; } public boolean CaveDown(){ Cave a = (Cave) getOneObjectAtOffset(-20,25,Cave.class); return a !=null; } }
MatheMagician MatheMagician

2013/3/15

#
Instead of checking the walls before you move, check for the walls after you move and if you are stuck, go backwards. Your code for the if statement should be more like this:
if(Greenfoot.isKeyDown("up")&&!CaveUp()){
            moveUp();
            if(getOneIntersectingObject(Cave.class) != null) moveDown();
        } 
You need to login to post a reply.