2013-03-19 56 views
0

我有一個問題,使用數組的對象數組或簡單的對象數組,我敢肯定,這與光滑無關。每當init方法運行併到達塊部分時,我都會收到一個空指針異常。我也確信問題是我沒有正確地聲明Block對象。請真的需要一些幫助。有問題聲明對象數組的數組Java

import org.newdawn.slick.*; 
import org.newdawn.slick.state.*; 

public class Stages extends BasicGameState { 
    LevelInfo level = new LevelInfo(1); 
    Block block[][]; 
    public Stages(int state) { 

    } 
    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException { 
     level.init(); 
     for(int i = 0; i < 13;i++) { 
      for(int j = 0; j < 13;j++) { 
       block[i][j] = new Block(level.type[i][j]); 
      } 
     } 

    } 
    public void render(GameContainer gc, StateBasedGame sbg,Graphics g) throws SlickException { 
     for(int i = 0; i < 13;i++) { 
      for(int j = 0; j < 13;j++) { 
       g.drawImage(block[i][j].image,j*60,i*60); 
      } 
     } 
    } 
    public void update(GameContainer gc, StateBasedGame sbg,int delta) throws SlickException { 

    } 
    public int getID() { 
     return 2; 
    } 
} 

回答

1

你永遠不會實例化2Dblock陣列,導致NPE然後嘗試在這裏

block[i][j] = new Block(level.type[i][j]); 

變量賦值你可以聲明這樣你的數組:

private Block block[][] = new Block[13][13]; 
+0

謝謝。你是唯一一個沒有低姿態回答我的人。 – 2013-03-20 05:59:10

3

你」不會初始化block本身 - 它的值始終爲null。您需要:

block = new Block[13][13]; 

init方法,或在構造函數中,或者在變量聲明。

一對夫婦的其他注意事項:

  • 你幾乎應該讓你的變量private
  • 你或許應該避免硬編碼的13號這麼頻繁...你可以有WIDTH常數也許吧?HEIGHT
  • 這將是更地道聲明變量爲:

    private Block[][] block; 
    

    這令有關該變量的所有類型的信息一起。在引入Java時,「變量名稱後面的數組部分」確實使現有的C/C++程序員感到高興。