Я создаю множество шаровых спрайтов, которые случайным образом отскакивают от экрана.При касании я хочу, чтобы мяч был удален со сцены.(Если несколько шариков занимают одно и то же пространство, они также будут удалены в данный момент).
Я понимаю, что scene.detachChild должен быть запущен на runOnUpdateThread, поэтому в моем подклассе Ball sprite я отсоединяюна ощупь путем переопределения onAreaTouched:
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY)
{
((BaseGameActivity) thisAct).runOnUpdateThread(new Runnable() {
@Override
public void run() {
/* Now it is save to remove the entity! */
//scene.unregisterTouchArea(Ball.this);
scene.detachChild(Ball.this);
}
});
return false;
}
Я должен передать в главном Activity конструктору шара спрайт, а затем удалить шар из главной сцены Activity.
Если я раскомментируюВ строке scene.unregisterTouchArea (Ball.this), чтобы остановить спрайты, действующие на прикосновения (это не влияет на удаление, но думал, что лучше остановить обработку прикосновений), я получу исключение indexOutOfBoundsException, которое, я думаю, связано сне отсоединять спрайты из runOnUpdateThread.
**java.lang.IndexOutOfBoundsException: Invalid index 90, size is 90
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
at java.util.ArrayList.get(ArrayList.java:311)
at org.anddev.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:320)**
Два вопроса:
Правильно ли я обработал удаление спрайта внутри подкласса ball, используя переопределениеonAreaTouched, или я должен как-то вернуть удаление в основное действие (нужен ли мне подклассна первом месте)?
Есть идеи, почему я получаю исключение IndexOutOfBoundsException, если я включаю unregisterTouchArea?
Спасибо за любую помощь.