thats why I also write use an epsilon here in the comment, its up to OP to implement an epsilon though.
I think theagentd's point is that there's no guarantee that
N steps, for any integer
N, will land the player on the target position, either exactly or within the epsilon margin-of-error. You'd need to choose the step length (as well as the step direction) carefully to achieve that. Or (as Karmington said) interpolate between the original position and the target position. Or do something like the following, which moves the player towards the target at a fixed speed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| static final double stepSize = 5.0;
double playerX, playerY; double targetX, targetY;
void updatePosition() { double dx = targetX - playerX, dy = targetY - playerY; double distance = Math.hypot(dx,dy); if ( distance > stepSize ) { playerX += stepSize*dx/distance; playerY += stepSize*dy/distance; } else { playerX = targetX; playerY = targetY; } } |
Simon