Java碰撞检测移动平台楠

时间:2014-08-15 20:07:21

标签: java

我一直试图在我的2D平台游戏中制作移动平台,当我试图让玩家随平台移动时,我写了这个。由于某种原因,这会导致玩家X的位置为“NaN”,而当打印出tdX时,它会输出交替的“1.0”和“NaN”

//delta X
double dX = newPoint.getX()-oldPoint.getX();
//delta Y
double dY = newPoint.getY()-oldPoint.getY();
//tdX and tdY are supposed to be 1 if their matching variable
// is positive and -1 if it is negative.
double tdX = dX/Math.abs(dX);
double tdY = dY/Math.abs(dY);
System.out.println(tdX);
//If the player is standing on the platform
if(Display.player.me(0,1).intersects(super.phys)) {
    //Add percentSpeed% of deltaX to the players location
    Display.player.loc.setLocation(Display.player.loc.getX()+((dX/100) *
                              (percentSpeed*tdX)),Display.player.loc.getY());
}

如果我从最后一行中取出* tdX部分,它可以工作,但是因为它不会向后推动玩家正向,因为它不会乘以-1 ... 这意味着tdX创建错误,但我不知道它是怎么回事......请帮助我。

3 个答案:

答案 0 :(得分:0)

如果dX = 0(即newPoint.getX() == oldPoint.getX()),则计算0/0,结果为tdX = NaN

答案 1 :(得分:0)

如果tdXNaN

dX将为0,因为将double除以0会产生NaNtdYdY相同。

您可能想要专门检查0:

double tdX = dX == 0 ? 0 : dX/Math.abs(dX);
double tdY = dY == 0 ? 0 : dY/Math.abs(dY);

答案 2 :(得分:0)

NaN是将浮点零除以浮点零的结果。

一些例子:

float f = 0.0f;
double d = 0.0;

// f/f is NaN
// f/d is NaN
// d/f is NaN
// d/d is NaN

将整数零除以整数零会导致运行时异常。