2014-10-19 131 views
1

我有三個類:運動,碰撞和變量(Variables類是我存儲變量的地方,它們都是公共的和靜態的,考慮到我是java新手,我不太瞭解static關鍵字的作用是什麼,所以我的問題可能與static關鍵字有關)。在我的碰撞類中,有一種方法可以檢查地圖中的碰撞。現在,這個方法效果完美:Java:變量不增加

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變量);我想知道爲什麼我的x(Variables.playerX)變量不增加3(這是我的Variables.speed變量)。

+1

只是說使用(RightKeyPressed&!collisionRight) – 2014-10-19 15:55:50

+1

您的標題沒用。它應該描述具體問題。 – 2014-10-19 15:55:50

回答

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

+0

那麼如何在該類中創建一個方法來改變我的'Variables.playerX'變量的值呢? – 2014-10-19 15:59:05

+0

@GeorgiTonchev:通過參考。查看更新後的答案。 – NPE 2014-10-19 16:00:55