游戏中的精灵想要走向给定的(x, y)
坐标对,但每个刻度只能移动walkSpeed
像素。
为了弄清楚移动它们的距离,我刚刚收到if
句话。
public void walkToward(Integer x, Integer y) {
int walkSpeed = 1;
int dX = x - getxPos();
int dY = y - getyPos();
int moveX, moveY;
if (dX > 0) {
moveX = walkSpeed;
} else if (dX < 0) {
moveX = -walkSpeed;
} else {
moveX = 0;
}
if (dY > 0) {
moveY = walkSpeed;
} else if (dY < 0) {
moveY = -walkSpeed;
} else {
moveY = 0;
}
{code to move player ...}
}
这不是问题,但我觉得有更多的数学方法可以做到这一点。形式的东西
int moveX = {some operation} * walkSpeed;
{some operation}
将所有正数变为1,所有负数变为-1,0变为0。
答案 0 :(得分:4)
您可以尝试使用Math.signum()
返回参数的signum函数;如果参数为零,则为零 零,如果参数大于零则为1.0,如果参数为-1.0 小于零。
答案 1 :(得分:3)
int moveX = Math.signum(dX);
int moveY = Math.signum(dY);
答案 2 :(得分:0)
if(dX == 0){
moveX=0;}
else {moveX =dX/Math.abs(dX)*walkSpeed; }
使用dX / Math.abs(dX)可以减少你的if和条件
答案 3 :(得分:-1)
您遇到问题,因为您的速度定义不正确。它必须是sqroot(dX*dX + dY*dY)
。所以标志无所谓。
Java解决方案:Math.hypot(dX, dY)