私は、画面の周りをランダムに跳ね返るたくさんのボールスプライトを作成しています。触ったとき、私はボールを場から取り除きたい。 (複数のボールが同じスペースを占めている場合、現時点ではそれも削除されます)。Andengineを使って安全にスプライトを削除する
私は私のボールスプライトサブクラス内、私はonAreaTouchedオーバーライドすることにより、タッチにdetachChildのでscene.detachChildは、runOnUpdateThread上で実行する必要があります実現:
@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.is)行のコメントを外すと、タッチに作用するスプライトを停止することができます(これは削除には影響しませんが、処理中のタッチを止める方が良いと思った場合)。私が考えている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を取得するか?
任意の助けてくれてありがとう。
こんにちは、ありがとうございました。私はonLoadSceneでregisterOnTouchAreaを使用する必要があることに気づき、Ballクラスから完全に取り除くことができます。 – Chris