我在使用对象数组的数组或只是对象数组时遇到问题,我很确定这与光滑无关。每当init方法运行并到达块部分时,我都会得到一个空指针异常。我也确定问题在于我没有正确地声明Block对象。我真的需要一些帮助。
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;
}
}
答案 0 :(得分:3)
您永远不会初始化block
本身 - 它的值始终为null
。你需要:
block = new Block[13][13];
在init
方法中,或在构造函数中,或在变量声明中。
其他几点说明:
private
WIDTH
和HEIGHT
的常数?将变量声明为:
更为惯用private Block[][] block;
将变量的所有类型信息保存在一起。在引入Java时,“变量名后面的数组部分”确实让现有的C / C ++程序员感到高兴。
答案 1 :(得分:1)
您永远不会实例化2D
block
数组,导致NPE
然后您尝试在此处分配变量
block[i][j] = new Block(level.type[i][j]);
你可以这样声明你的数组:
private Block block[][] = new Block[13][13];