int dx=0, dy=0; if (Greenfoot.isKeyDown("up")) dy--; if (Greenfoot.isKeyDown("down")) dy++; if (Greenfoot.isKeyDown("right")) dx++; if (Greenfoot.isKeyDown("left")) dx--; if (dx != 0 || dy != 0) { turnTowards(getX()+dx*3, getY()+dy*3); setLocation(getX()+dx*3, getY()+dy*3); if (isTouching(Fence.class) || isTouching(FenceUp.class)) //I don't believe you need a separate FenceUp class { setLocation(getX()-dx*3, getY()-dy*3); } if (shield.getWorld() == null) getWorld().addObject(shield, getX()+30*dx, getY()+30*dy); else shield.setLocation(getX()+2*dx, getY()+2*dy); shield.setRotation(getRotation()); } else getWorld().removeObject(shield);