我有一个基本的PlayerEntity,在更新时使用velocity更新它的位置。这是整个更新方法:
public void update() {
if (!AABB.checkCollisionCB(world, position[0] += velocity[0], position[1], position[2])) {
//position[0] += velocity[0];
}
if (!AABB.checkCollisionCB(world, position[0], position[1] += velocity[1], position[2])) {
//position[1] += velocity[1];
}
if (!AABB.checkCollisionCB(world, position[0], position[1], position[2] += velocity[2])) {
//position[2] += velocity[2];
}
for (int i = 0; i < 3; i++)
velocity[i] *= .8;
}
现在如你所见,位置[0] + =速度[0];被注释掉了,理论上不应该执行,但它仍然存在!这有什么关系?此外,如果它们在取消注释时似乎仍然执行,并且'if'不满足!
代码中唯一另外提到的PlayerEntity如下:
if (player.pushingF == true)
playerEntity.velocity[0] += .05;
if (player.pushingB == true)
playerEntity.velocity[0] -= .05;
if (player.pushingJ == true)
playerEntity.velocity[1] += .05;
if (player.pushingS == true)
playerEntity.velocity[1] -= .05;
if (player.pushingL == true)
playerEntity.velocity[2] += .05;
if (player.pushingR == true)
playerEntity.velocity[2] -= .05;
但这只会改变速度,不应做任何与位置相关的事情。 我正在使用eclipse,我试过'Project&gt;干净,'但这似乎什么都不做。奇怪的是,它不会在控制台中进行任何打印,或者可能在那些'if'中进行任何其他功能。
答案 0 :(得分:4)
if (!AABB.checkCollisionCB(world, position[0] += velocity[0], ...
请注意,position[0] += velocity[0]
- 语句的条件为if
,因此无论条件是否评估为true
,它都会执行(并且无论是什么声明的正文是)。
答案 1 :(得分:1)
您可以在if语句中更改变量:
if (!AABB.checkCollisionCB(world, position[0] += velocity[0], position[1], position[2]))
如果你这样做会永远改变......