2012-05-26 3 views
0

Я делаю игру для Android, которая порождает вражеские спрайты с определенным интервалом в верхней части экрана. Там нет никаких синтаксических ошибок, но при запуске игры он выходит из строя из-за этой функции:Enemy Spawning Android

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

Care, чтобы сказать нам, что линия 49 есть? –

ответ

1

С неперехваченного исключением вы получаете это NullPointerException, вам нужно будет проверить, что каждый элемент внутри holderEnemy конкретизируются его соответствующий типа. Вы не можете разыскивать null - это то, что задано по умолчанию в массиве.

лупить точку немного, если взять массив элементов, таких как:

Enemy[] holderEnemy = new Enemy[1000]; 

, что не достаточно для создания экземпляра массива. Вам нужно будет перебрать массив и создать новый Enemy s для каждого элемента. В противном случае вам необходимо гарантировать, что в пределах [0, numVisibleEnemies) элементы массива будут правильно созданы.

(Обратите внимание, что я предполагаю, что на тип объекта, но применяется принцип.)