2012-10-03 112 views
2

我想用Java做一個遊戲,而且我已經有了一些東西。但我想讓玩家拍子彈。 我想出了構建對象數組的想法,並將所有Bullet實例放入數組中。然後在一個線程中,我想讓它們全部移動(數組中的所有對象)。Java - 遊戲:多個實例

這是我放在主類:

Bullet[] BulletArray; 

public int Bullets = 0; 

public void run() { 

    for(int i = 0; i < Bullets; i++){ 
     BulletArray[i].Step(); 
    } 

    if(Key.FireKey){ 
     BulletArray[Bullets + 1] = new Bullet(); 
     Bullets += 1; 
    } 
} 

我只是包括了基本的東西,即運行功能運行正常,在原代碼。 代碼不起作用,當我按下Fire時它會給我一個錯誤。該錯誤是在某處

BulletArray[Bullets + 1] = new Bullet(); 

我希望你明白我的意思。

+4

對不起......有什麼問題嗎? – manub

+0

這是什麼問題?或者你想告訴我們你正在做一個遊戲?和FYI。,你應該聲明你的變量(要添加,方法也是),以小寫字母或下劃線開頭。 –

+1

你應該應用Java命名約定:變量以小寫字母開頭:BulletArray => bulletArray,Bullets =>項目符號等。 – assylias

回答

2

那麼,對於初學者,您的BulletArray永遠不會初始化。

當您輸入run()時,您的for()循環似乎正常工作,因爲它實際上並未進入該塊。您的int i = 0已聲明且已大於或等於您的限制,即int Bullet = 0。這意味着循環體不會執行。

然後,當您按Key.FireKey時,它會嘗試引用不存在的數組索引。它不能存在,因爲該數組從未被初始化過。

要初始化您的數組,你需要做更多的事情是這樣的:

private int maxBullets = 10; 
Bullet[] bulletArray = new Bullet[maxBullets]; 

然後你for()循環將實際輸入。請注意,然而,在你的Key.FireKey區塊中,你將不得不執行一些檢查,以確保你沒有得到IndexOutOfBoundsException,試圖發射比你創建的更多的子彈。即

if(Key.FireKey) { 
    if(bullets < maxBullets) { 
     bulletArray[++bullets] = new Bullet(); 
    } 
} 
+0

謝謝,我對java很陌生,當然它是如何處理數組的。我知道這個問題有點愚蠢,但謝謝! – DemoDreams

+1

這不是一個愚蠢的問題。 :)每個人都必須從某個地方開始。 – asteri