方法Java:变量不是递增的
我有三个类:Movement、Collision和Variables(Variables类是我存储变量的地方,它们都是公共的和静态的。考虑到我是java新手,我不太了解static关键字的作用,所以我的问题可能是static关键字)。在我的碰撞类中,有一个方法可以检查贴图中的碰撞。现在,这种方法非常有效:
public void checkCollision(int x, int y)
{
if (x == 100){
Variables.collisionRight = true;
} else {
Variables.collisionRight = false;
}
}
在这里,我的运动类中有一个方法不起作用:
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 楼答案
正在发生的事情是
Variables.playerX
被值传递为x
。当函数修改x
时,它实际上是在修改Variables.playerX
的本地副本有关进一步讨论,请参见Is Java "pass-by-reference" or "pass-by-value"?和Java is Pass-by-Value, Dammit!
解决这个问题的一种方法是通过传递
Variables
对象(引用)而不是x
和y
:注意我是如何重写
if
条件的。虽然你所说的并不是不正确的,但习惯上我们并没有明确地将布尔与true
和false
进行比较。此外,在布尔上下文中,&&
和||
优于&
和|
,因为它们short-circuit