数学检查数字是正数,负数还是0

时间:2015-10-13 08:54:11

标签: java math

游戏中的精灵想要走向给定的(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。

4 个答案:

答案 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)