我正在使用LibGDX为Android构建游戏。 我在这个类中得到一个空指针异常,但我不知道为什么(检查注释)。
public class ScoreFont {
private Texture _numbers[];
private int _number;
public ScoreFont(){
//Load font
for(int i = 0; i <= 9; i++){
_numbers = new Texture[10];
_numbers[i] = new Texture("font_"+i+".png");
/*the line above works fine. if I use if(_number[i] != null) System.out.println("loaded"); it will print*/
}
_number = 0;
}
public void setNumber(int number){
_number = number;
}
public void draw(SpriteBatch sb, float x, float y, float width, float height){
String numberString = Integer.toString(_number);
int numDigits = numberString.length();
float totalWidth = width * numDigits;
//Draw digits
for(int i = 0; i < numDigits; i++){
int digit = Character.getNumericValue(numberString.charAt(i));
/*I get a null pointer exception when this method or the dispose() method are called. The _numbers[digit] == null, or even if I switch it for _numbers[0] it is still null. Why?*/
sb.draw(_numbers[digit], x - totalWidth/2 + i*width, y - height/2, width, height);
}
}
public void dispose(){
//I get null pointer exception
for(Texture texture: _numbers){
texture.dispose();
}
}
}
这里可能会发生什么?必须在任何方法之前调用此函数的构造函数,这样可以保证纹理总是正确加载吗?那么为什么我会得到空指针异常?
谢谢!
答案 0 :(得分:1)
_numbers = new Texture[10];
_numbers[i] = new Texture("font_"+i+".png");
在循环中,每次迭代都会创建一个新数组,这意味着当循环结束时,您将拥有一个刚刚初始化的最后一个元素的新数组。 将数组的创建移出循环。