onSceneTouchEvent を使用して、TMX マップ上でプレーヤーを移動しています。
@Override
public Scene onCreateScene() {
...
mScene.setOnSceneTouchListener(this);
}
...
@Override
public boolean onSceneTouchEvent(Scene pScene, final TouchEvent pSceneTouchEvent) {
switch(pSceneTouchEvent.getAction()) {
case TouchEvent.ACTION_DOWN:
mLastMotionX = pSceneTouchEvent.getX();
mLastMotionY = pSceneTouchEvent.getY();
break;
case TouchEvent.ACTION_MOVE:
mLastMotionX1 = pSceneTouchEvent.getX();
mLastMotionY1 = pSceneTouchEvent.getY();
SpeedVector(mLastMotionX, mLastMotionY, mLastMotionX1,
mLastMotionY1);
break;
case TouchEvent.ACTION_UP:
mLastMotionX2 = pSceneTouchEvent.getX();
mLastMotionY2 = pSceneTouchEvent.getY();
SpeedVectorStop(mLastMotionX, mLastMotionY, mLastMotionX2,
mLastMotionY2);
break;
}
return false;
}
...
public void SpeedVector(float x1, float y1, float x2, float y2) {
if ((Math.abs(x2 - x1) < 55) && (Math.abs(y2 - y1) < 55)) {
float r = (float) Math.sqrt(((x2 - x1) * (x2 - x1))
+ ((y2 - y1) * (y2 - y1)));
float rx = (x2 - x1) / r;
float ry = (y2 - y1) / r;
new Vector2(rx * 100, ry * 100);
new Vector2(x2, y2);
if (speedThread) {
mPlayerBody.setLinearVelocity(rx * 15, ry * 15);
} else
mPlayerBody.setLinearVelocity(rx * 5, ry * 5);
}
}
public void SpeedVectorStop(float x1, float y1, float x2, float y2) {
if ((Math.abs(x2 - x1) < 10) && (Math.abs(y2 - y1) < 10)) {
mPlayerBody.setLinearVelocity(0, 0);
}
}
また、シーンには、プレイヤーを追跡する他の多くのスプライト (敵) がいます (単純な AI)。プレイヤーとの距離に応じて、位置と速度が変化します。したがって、すべてのデータは次のメソッドで更新されます。
@Override
public final void onUpdate(final float pSecondsElapsed) {
//some code
}
そして、シーンに数回触れると、AndEngine がクラッシュします。これは LogCat です。
05-05 17:13:06.539: V/AndEngine(2676): org.andengine.input.touch.TouchEvent$TouchEventPool が使い果たされ、2 つのアイテムがまだリサイクルされていません。もう1つ割り当てられます。05-05 17:13:06.539: V/AndEngine(2676): org.andengine.util.adt.pool.PoolUpdateHandler$1 が使い果たされ、2 つのアイテムがまだリサイクルされていません。もう1つ割り当てられています。05-05 17:13:06.559: V/AndEngine(2676): org.andengine.input.touch.TouchEvent$TouchEventPool が使い果たされ、3 つのアイテムがまだリサイクルされていません。もう1つ割り当てられています。05-05 17:13:06.559: V/AndEngine(2676): org.andengine.util.adt.pool.PoolUpdateHandler$1 が使い果たされ、3 項目がまだリサイクルされていません。もう1つ割り当てられています。05-05 17:13:06.579: V/AndEngine(2676): org.andengine.input.touch.TouchEvent$TouchEventPool が使い果たされ、4 つのアイテムがまだリサイクルされていません。もう1つ割り当てられます。05-05 17:13:06.579: V/AndEngine (2676): org.andengine.util.adt. pool.PoolUpdateHandler$1 が使い果たされ、4 つのアイテムがまだリサイクルされていません。もう1つ割り当てられます。
や。。など。
誰でもこの問題に遭遇しましたか?
この問題は非常に緊急であり、まだ解決策がありません (