我正在制作一款安卓游戏,以一定的间隔在屏幕顶部产生敌人的精灵。没有语法错误,但是当我运行游戏时,由于此功能而崩溃:
public void updateEnemies() {
if (numEnemiesCreated == numVisibleEnemies) {
if (timeLastCreatedEnemy + 1000 < System.currentTimeMillis()) {
timeLastCreatedEnemy = System.currentTimeMillis();
boolean createdNewEnemy = false;
for (int i = 0; i < this.numVisibleEnemies; i++) {
if (createdNewEnemy == false) {
if (holderEnemy[i].isDisposed()) {
this.generateNewEnemy(i);
createdNewEnemy = true;
}
}
}
}
for(int i = 0; i<numVisibleEnemies; i++){
if(!holderEnemy[i].isDisposed()){
holderEnemy[i].move();
}
}
} else {
holderEnemy[numEnemiesCreated] = new Enemy(context, 0, 0);
numEnemiesCreated++;
}
}
我已经尝试了一切,我只是无法让它工作!这是我的日志猫崩溃报告:
05-25 18:49:13.031: W/dalvikvm(6736): threadid=9: thread exiting with uncaught exception (group=0x40015578)
05-25 18:49:13.035: E/AndroidRuntime(6736): FATAL EXCEPTION: Thread-10
05-25 18:49:13.035: E/AndroidRuntime(6736): java.lang.NullPointerException
05-25 18:49:13.035: E/AndroidRuntime(6736): at com.jlennon.gametest.EnemySpawn.updateEnemies(EnemySpawn.java:49)
05-25 18:49:13.035: E/AndroidRuntime(6736): at com.jlennon.gametest.MainGamePanel$AnimationThread.update(MainGamePanel.java:94)
05-25 18:49:13.035: E/AndroidRuntime(6736): at com.jlennon.gametest.MainGamePanel$AnimationThread.run(MainGamePanel.java:61)
答案 0 :(得分:1)
由于您获得的未捕获异常是NullPointerException
,因此您需要检查holderEnemy
内的每个元素是否都实例化为其正确的类型。您不能取消引用null
- 这是默认情况下在数组中给出的内容。
如果您采用一系列元素,例如:
,请稍微考虑一下这一点Enemy[] holderEnemy = new Enemy[1000];
这不足以实例化数组。您需要遍历数组并为每个元素创建新的Enemy
。否则,您需要保证在[0,numVisibleEnemies
)的范围内,您的数组元素被正确实例化。
(请注意,我猜对象类型,但原则适用。)