So what I am trying to do is prevent a moving object from colliding into other objects. To do this, I am trying to move it a little bit at a time. If there is a collision, it moves back. It loops through this until it either moves the whole distance it needs to in one act, or if a collision is detected and it needs to move back slightly. It sounds good in theory, but when I try to implement the idea into my code it doesn't work as expected. I have tried coding it several times and each time it has failed. This is my current code (which kind of works but far from what I was hoping for):
Can anyone identify where my code is going wrong? Or perhaps it should be abandoned and I should try it from a different angle. Any advice is appreciated, thanks in advance.
private void move(){ double stepX = 0, stepY = 0; //represents the amount that will be moved at a time, starts at 0 if(Math.abs(xSpeed) > Math.abs(ySpeed)){ //check if xSpeed is greater than ySpeed (in terms of absolute value) if(xSpeed > 0) stepX = 1; else stepX = -1; stepY = stepX*(ySpeed/xSpeed); //multiplying by stepX insures that stepY is not altered by whether or not xSpeed is positive or negative for(int i = 0; Math.abs(i) <= Math.abs(xSpeed); i += stepX){ if(getOneIntersectingObject(Actor.class)!=null){ setRealLocation(getRealX() - stepX, getRealY() - stepY); setXSpeed(i); setYSpeed((i/stepX)*stepY); return; } else setRealLocation(getRealX() + stepX, getRealY() + stepY); } } else{ //same as above but modified for if (the absolute value of) ySpeed is bigger if(ySpeed > 0) stepY = 1; else stepY = -1; stepX = stepY*(xSpeed/ySpeed); for(int i = 0; Math.abs(i) <= Math.abs(ySpeed); i += stepY){ if(getOneIntersectingObject(Actor.class)!=null){ setRealLocation(getRealX() - stepX, getRealY() - stepY); setXSpeed((i/stepY)*stepX); setYSpeed(i); return; } else setRealLocation(getRealX() + stepX, getRealY() + stepY); } } }