Java:变量没有递增

时间:2014-10-19 15:54:16

标签: java methods static

我有三个类:Movement,Collision和Variables(Variables类是我存储变量的地方,所有这些都是公共的和静态的。考虑到我是java的新手,我不明白静态关键字是什么是的,所以我的问题可能是静态关键字。)。在我的Collision类中,有一种方法可以检查地图中的碰撞。现在这种方法非常有效:

public void checkCollision(int x, int y)
 {

    if (x == 100){
        Variables.collisionRight = true;

    } else {
        Variables.collisionRight = false;
    }
 }

这里我的Movement类中有一个方法不起作用:

public void playerMovement (int x, int y)
{
    if (RightKeyPressed == true & collisionRight == false) {
        x += Variables.speed;

    }
}

以下是我称之为这些方法的方法:

someObject.checkCollision(Variables.playerX, Variables.playerY);
someOtherObject.playerMovement(Variables.playerX, Variables.playerY);

对我来说问题是这一行:

x += Variables.speed;

如果我改变

x

Variables.playerX

一切正常,但这不是我希望它发挥作用的方式。

它无法正常工作。基本上应该是(Variables.playerX + = Variables.speed) 所有方法都是样本。

我想知道为什么我的x(Variables.playerX)变量没有递增3(这是我的Variables.speed变量);

1 个答案:

答案 0 :(得分:2)

正在发生的事情是,Variables.playerX按值传递x。当函数修改x时,它正在有效地修改Variables.playerX的本地副本。

有关进一步的讨论,请参阅Is Java "pass-by-reference" or "pass-by-value"?Java is Pass-by-Value, Dammit!

解决此问题的一种方法是传递(引用)Variables对象而不是xy

public void playerMovement (Variables vars)
{
    if (RightKeyPressed && !collisionRight) {
        vars.x += vars.speed;
    }
}

P.S。请注意我如何重写if条件。虽然您拥有的内容并非不正确,但我们并未明确地将布尔值与truefalse进行比较。此外,&&||优先于布局上下文中的&|,因为它们short-circuit