나는 무작위로 화면 주위로 튀는 공 스프라이트를 많이 만듭니다. 만졌을 때 나는 공을 현장에서 제거하기를 원합니다. (두 개 이상의 공이 같은 공간을 차지하면 그 순간에도 제거됩니다.)Andengine을 사용하여 스프라이트를 안전하게 제거하십시오.
내가 scene.detachChild가 runOnUpdateThread에서 실행해야합니다 실현, 내 볼 스프라이트 서브 클래스에서, 그래서 나는 onAreaTouched 대체하여 터치에 detachChild :
@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;
}
것은 내가 생성자에 주요 활동에 통과해야 볼 스프라이트를 제거한 다음 주요 활동 장면에서 공을 제거하십시오.
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)**
두 질문 :
내가 재정의 onAreaTouched 사용하여 공을 서브 클래스 내에서 스프라이트의 제거를 처리하기 위해 수정, 또는 어떻게 든 (주요 활동에 다시 제거해야 있습니까 처음에 서브 클래스가 필요합니까?)
unregisterTouchArea를 포함하면 IndexOutOfBoundsException이 발생하는 이유는 무엇입니까?
도움 주셔서 감사합니다.
안녕하세요. 답장을 보내 주셔서 감사합니다. 나는 Ball 클래스에서 완전히 제거 할 수 있도록 onLoadScene에서 registerOnTouchArea를 사용해야한다는 것을 알았습니다. – Chris