Enemy Spawning Android

时间:2012-05-26 01:55:26

标签: java android eclipse sprite

我正在制作一款安卓游戏,以一定的间隔在屏幕顶部产生敌人的精灵。没有语法错误,但是当我运行游戏时,由于此功能而崩溃:

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)

1 个答案:

答案 0 :(得分:1)

由于您获得的未捕获异常是NullPointerException,因此您需要检查holderEnemy内的每个元素是否都实例化为其正确的类型。您不能取消引用null - 这是默认情况下在数组中给出的内容。

如果您采用一系列元素,例如:

,请稍微考虑一下这一点
Enemy[] holderEnemy = new Enemy[1000];

这不足以实例化数组。您需要遍历数组并为每个元素创建新的Enemy。否则,您需要保证在[0,numVisibleEnemies)的范围内,您的数组元素被正确实例化。

(请注意,我猜对象类型,但原则适用。)