2013-06-08 9 views
5

ho seguito errori che non ho idea su:AndEngine GLES2- IndexOutOfBoundsException all'interno Entity.java linea: 1402

06-08 19:59:54.367: E/AndroidRuntime(11629): FATAL EXCEPTION: UpdateThread 
06-08 19:59:54.367: E/AndroidRuntime(11629): java.lang.IndexOutOfBoundsException: Invalid index 11, size is 0 
06-08 19:59:54.367: E/AndroidRuntime(11629): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
06-08 19:59:54.367: E/AndroidRuntime(11629): at java.util.ArrayList.get(ArrayList.java:304) 
06-08 19:59:54.367: E/AndroidRuntime(11629): at org.andengine.entity.Entity.onManagedUpdate(Entity.java:1402) 
06-08 19:59:54.367: E/AndroidRuntime(11629): at org.andengine.entity.scene.Scene.onManagedUpdate(Scene.java:284) 
06-08 19:59:54.367: E/AndroidRuntime(11629): at org.andengine.entity.Entity.onUpdate(Entity.java:1167) 
06-08 19:59:54.367: E/AndroidRuntime(11629): at org.andengine.engine.Engine.onUpdateScene(Engine.java:591) 
06-08 19:59:54.367: E/AndroidRuntime(11629): at org.andengine.engine.Engine.onUpdate(Engine.java:586) 
06-08 19:59:54.367: E/AndroidRuntime(11629): at org.andengine.engine.Engine.onTickUpdate(Engine.java:548) 
06-08 19:59:54.367: E/AndroidRuntime(11629): at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820) 

Credo che sia qualcosa legato con l'onManagedUpdate() all'interno di un MoveModifier ho usato nel mio codice .

risposta

7

Questo è quasi sempre dovuto al distacco di entità nel thread sbagliato. Verificare ovunque sia possibile separare le entità in risposta a un'interazione dell'utente o in una richiamata Modificatore e avvolgerla in runOnUpdateThread. Es .:

@Override 
public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) { 
    engine.runOnUpdateThread(new Runnable() { 
     @Override 
     public void run() { 
      widget.detachSelf(); 
     } 
    }); 
} 
+0

Se non riesco a scollegarlo su ModificatoreFinito, in quale altro luogo posso staccarlo? In realtà sto cambiando la scena su ModificatoreFinito. Qualche idea? – Nafis

+2

Puoi scollegarlo da onModifierFinished finché lo sposti in "runOnUpdateThread" come nel mio esempio. Funziona bene perché non esegue il distacco nel thread corrente, ma dice al "thread di aggiornamento" di eseguirlo non appena possibile. – simonp

+1

Il motivo per cui questo risolve le cose è che consente al thread di aggiornamento di garantire che i cambiamenti di scena non avvengano quando è nel mezzo di iterare sulla scena. Se si esegue il distacco al di fuori del thread di aggiornamento, si rischia di farlo mentre il thread di aggiornamento esegue il looping di un array che contiene quell'entità e attiva un ArrayIndexOutOfBoundsException, esattamente quello che è successo a te. – simonp

Problemi correlati