我一直试图在我的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创建错误,但我不知道它是怎么回事......请帮助我。
答案 0 :(得分:0)
如果dX
= 0
(即newPoint.getX() == oldPoint.getX()
),则计算0/0
,结果为tdX
= NaN
。
答案 1 :(得分:0)
tdX
为NaN
, dX
将为0
,因为将double
除以0
会产生NaN
。 tdY
和dY
相同。
您可能想要专门检查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
将整数零除以整数零会导致运行时异常。