这段代码是如何执行的?

时间:2013-05-29 00:04:56

标签: java eclipse lwjgl

我有一个基本的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'中进行任何其他功能。

2 个答案:

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

如果你这样做会永远改变......