我正在用AndEngine制作Android游戏。我有一个精灵阵列列表,每次更新时我都要检查玩家精灵是否与其中任何一个发生了碰撞。但此摘录我的代码是让我头疼:android ArrayList IndexOutOfBoundsException
public void onUpdate(final float pSecondsElapsed) {
sprites.addAndRemove();
for (int i=0;i<sprites.size();i++) {
if(playerSprite.collidesWith(sprites.get(i))) {
sprites.setToRemove(i);
//adds the sprite to a removal queue arraylist.
//the actual sprites arraylist is not touched until addAndRemove() fires.
}
}
}
看起来很基本的,但不知何故sprites.get(i)
抛出这个:
E/AndroidRuntime( 883): FATAL EXCEPTION: UpdateThread
E/AndroidRuntime( 883): java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4
尽管i<sprites.size()
,我以某种方式达到sprites.size()
值。我把每一次迭代拼写出的ArrayList的大小和我的当前值的日志信息,而且它似乎是正确的:
D/app( 883): size is 4
D/app( 883): i is 0
D/app( 883): size is 4
D/app( 883): i is 1
D/app( 883): size is 4
D/app( 883): i is 2
D/app( 883): size is 4
D/app( 883): i is 3
...由异常紧随其后。
所以我被困在这里,这怎么会发生?
W/dalvikvm( 883): threadid=9: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime( 883): FATAL EXCEPTION: UpdateThread
E/AndroidRuntime( 883): java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4
E/AndroidRuntime( 883): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
E/AndroidRuntime( 883): at java.util.ArrayList.get(ArrayList.java:311)
E/AndroidRuntime( 883): at org.anddev.andengine.entity.Entity.onManagedUpdate(Entity.java:776)
E/AndroidRuntime( 883): at org.anddev.andengine.entity.Entity.onUpdate(Entity.java:648)
E/AndroidRuntime( 883): at org.anddev.andengine.entity.Entity.onManagedUpdate(Entity.java:776)
E/AndroidRuntime( 883): at org.anddev.andengine.entity.scene.Scene.onManagedUpdate(Scene.java:261)
E/AndroidRuntime( 883): at org.anddev.andengine.entity.Entity.onUpdate(Entity.java:648)
E/AndroidRuntime( 883): at org.anddev.andengine.engine.Engine.onUpdateScene(Engine.java:494)
E/AndroidRuntime( 883): at org.anddev.andengine.engine.Engine.onUpdate(Engine.java:489)
E/AndroidRuntime( 883): at org.anddev.andengine.engine.Engine.onTickUpdate(Engine.java:465)
E/AndroidRuntime( 883): at org.anddev.andengine.engine.Engine$UpdateThread.run(Engine.java:684)
你可以发布完整的循环代码,和更多的错误日志? – MByD 2011-04-30 05:04:03
编辑,我把整个onUpdate方法 – herpderp 2011-04-30 05:22:35