2013-04-06 126 views
1

我創建了一個名爲multiplay的布爾值。IF語句問題Java

private boolean multiplay; 

public Game()中我有:

// make a player 
player = new Player(this); 
if(multiplay == true) { 
    player2 = new Player(this); 
} 

在我創建了一個方法,實際的類文件:

public void startMutliPlayer() { 
    multiplay = true; 
} 

我所試圖做的是當startMultiPlayer把它叫做將布爾multiplay設置爲true,因此,兩名球員將被添加到框架而不是一個。如果未調用「startMultiPlayer」,則只會添加一個播放器。

目前只有當我打電話給startMultiPlayer時,它只增加了一名選手而不是兩名選手。

UPDATE:

之所以能夠出使用下面的代碼進行排序這個問題:

// Make Players (Single & MultiPlayer) 
     if (multiplay == false) { 
      player = new Player(this); 
      player.setPosition(startPosition); 
      player.move(new Vec2(-210, 0)); 
      multiplay = true; 
     } else if(multiplay == true) { 
      player = new Player(this); 
      player.setPosition(startPosition); 
      player.move(new Vec2(-210, 0));player2 = new Player(this); 
      player2.setPosition(startPosition); 
      player2.move(new Vec2(-150, 0)); 
      multiplay = false; 
     } 

public static void startMutliPlayer() { 
     multiplay = false; 
    } 

感謝

+3

發佈SSCCE。您發佈的代碼不足以瞭解問題所在。另外,「if(multiplay)」就足夠了。不需要比較布爾值和true來獲得布爾值。 – 2013-04-06 12:08:34

+0

@JBNizet我需要發佈什麼內容。其他玩家不會加載任何錯誤。這就是我在這裏遇到的問題。順便說一句,我把它設置爲假,現在玩家出現,但即使我沒有打電話它也會出現。 – 2013-04-06 12:11:24

+0

我認爲你必須在'startMultiplayer()'方法中移動'if'語句,因此你將驗證'multiplay'變量的屬性,並添加播放器。 – Houari 2013-04-06 12:12:20

回答

0

Game類中的哪個對象是您調用startMultiPlay的?因爲在調用Game構造函數後總會調用它,所以它不起作用 - 因爲當調用Game ctor時,多重播放將是錯誤的。

上的方式來解決,這是

private boolean multiplay; 

需要改變,以

private static boolean multiplay; 

也使startMultiPlayer靜態和你創建一個遊戲對象之前調用它。

另一種方法是不在遊戲的ctor中創建玩家。 必須使用startMultiPlayer和startSinglePlayer方法 - 分別在這些方法中創建一個或兩個Player對象。

+0

我認爲對於OP來說,你必須給出更多的理論。我覺得是這樣的(我不是downvoter) – 2013-04-06 12:13:51

+0

我會盡力的謝謝。 – 2013-04-06 12:25:44

+0

@JamesDanny你應該投票答案,如果幫助。 **請評論你是否贊成票** – 2013-04-06 17:09:12

0

Game類創建的方法,即

public void setMultiplay(boolean multiplay) { 
    this.multiplay = multiplay; // scope 
    if (multiplay) { 
    player2 = new Player(this); 
    } 
} 
+0

嗨,這工作,但關鍵按鈕不起作用,我得到這個錯誤。線程「AWT-EventQueue-0」中的異常java.lang.NullPointerException \t at game.KeyHandler.keyPressed(KeyHandler.java:76) – 2013-04-06 12:23:13

+0

這是一個單獨的問題,你應該問一個單獨的問題。 – durron597 2013-04-06 12:28:42

0

我猜你在調用Game類的對象上的方法startMultiPlayer()。 但是,構造函數是在Java中創建對象時要執行的第一件事。 遊戲遊戲=新遊戲(); game.startMultiPlayer(); 將順序執行下面幾行:

// make a player 
player = new Player(this); 
if(multiplay == true) { 
    player2 = new Player(this); 
} 
multiplay = true; 

這意味着多重設置爲true,你檢查之後,如果這是真的。因此,您仍然處於單人模式。

嘗試在調用(或不調用)方法後檢查多重播放是否爲真。

另請注意,您可以簡單地編寫if(multiplay)而不是if(multiplay==true),因爲Java中的if語句只能採用布爾值。但這是個人喜好,無論如何,這可能是自動優化的。