andengineを使用してAndroidでゲームを開発しています。基本的にArrayList
、2 種類のスプライトを格納するために 2 を使用しています。Sprite
ユーザーの操作に応じて、実行時に両方のタイプを追加および削除しています。ただし、次のエラー コードのみでランダムなクラッシュが発生します。
10-09 12:11:13.532: A/libc(8015): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)
10-09 12:11:13.572: V/AndEngine(8015): org.andengine.input.touch.TouchEvent$TouchEventPool<TouchEvent> was exhausted, with 2 item not yet recycled. Allocated 1 more.
10-09 12:11:13.572: V/AndEngine(8015): org.andengine.util.adt.pool.PoolUpdateHandler$1<TouchEventRunnablePoolItem> was exhausted, with 2 item not yet recycled. Allocated 1 more.
10-09 12:11:13.602: V/AndEngine(8015): org.andengine.input.touch.TouchEvent$TouchEventPool<TouchEvent> was exhausted, with 3 item not yet recycled. Allocated 1 more.
10-09 12:11:13.602: V/AndEngine(8015): org.andengine.util.adt.pool.PoolUpdateHandler$1<TouchEventRunnablePoolItem> was exhausted, with 3 item not yet recycled. Allocated 1 more.
10-09 12:11:13.622: V/AndEngine(8015): org.andengine.input.touch.TouchEvent$TouchEventPool<TouchEvent> was exhausted, with 4 item not yet recycled. Allocated 1 more.
10-09 12:11:13.622: V/AndEngine(8015): org.andengine.util.adt.pool.PoolUpdateHandler$1<TouchEventRunnablePoolItem> was exhausted, with 4 item not yet recycled. Allocated 1 more.
10-09 12:11:16.195: V/AndEngine(8015): org.andengine.input.touch.TouchEvent$TouchEventPool<TouchEvent> was exhausted, with 5 item not yet recycled. Allocated 1 more.
10-09 12:11:16.195: V/AndEngine(8015): org.andengine.util.adt.pool.PoolUpdateHandler$1<TouchEventRunnablePoolItem> was exhausted, with 5 item not yet recycled. Allocated 1 more.
10-09 12:11:16.275: V/AndEngine(8015): org.andengine.input.touch.TouchEvent$TouchEventPool<TouchEvent> was exhausted, with 6 item not yet recycled. Allocated 1 more.
10-09 12:11:16.275: V/AndEngine(8015): org.andengine.util.adt.pool.PoolUpdateHandler$1<TouchEventRunnablePoolItem> was exhausted, with 6 item not yet recycled. Allocated 1 more.
画面上で指を動かし続けると、TouchEvent
プールの警告がポップアップし続けますが、ゲーム自体はハングします。正直なところ、何が原因なのかわかりません!私は多くのことを調べましたが、単一のアクションでクラッシュを特定することさえできません.
スプライトを作成/削除する私の方法は次のとおりです。
TypeAスプライト:
- の中に作成する
TimerHandler
ContactListener
産卵中を取り除くrunOnUpdateThread()
Runnable
TypeBSprite :
- Activity
onSceneTouchEvent()
はIOnSceneTouchListener
. ContactListener
産卵中を取り除くrunOnUpdateThread()
Runnable
が作成されるたびSprite
に、それぞれの に追加されますArrayList
。ArrayList
削除する必要がある場合は、を通じてから削除されContactListener
ます。
どんな助け/アイデアも本当に感謝しています! ありがとう!
編集:いくつかの試行錯誤を通じて、問題は TypeBSprite にあると確信しています
編集: TypeBSprite の作成を次のように実装しました。
mEngine.runOnUpdateThread(new Runnable() {
@Override
public void run() {
AnimatedSprite sprite = new AnimatedSprite(sX, sY, mSpriteRegion, getVertexBufferObjectManager());
sprite.setRotation(sRotation);
mScene.attachChild(sprite);
Body body = PhysicsFactory.createBoxBody(mPhysicsWorld, sprite, BodyType.StaticBody, MY_FIXTURE);
sprite.setUserData("spiteB");
body.setUserData(sprite);
mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(sprite, body, true, true));
}
});