シーン上をランダムな方向に移動するスプライト(Easy Enemyなど)があります。新しいスプライト ( myFood )と衝突すると、新しいアニメーションを再生し、簡単な敵に新しい方向を与えます。Easy Enemy が新しいパスを完成させたら、それらをPoolに送りたいと思います。onPathFinshed()内でエラーが発生しました。
カスタムSceneとAnimated Spriteの両方を使用します。それらをリサイクルするためのEasyEnemyPoolクラスも作成します。
エラー:
02-07 11:52:55.624: E/AndroidRuntime(22486): 致命的な例外: UpdateThread 02-07 11:52:55.624: E/AndroidRuntime(22486): java.lang.IndexOutOfBoundsException: 無効なインデックス 0、サイズは 0 02 -07 11:52:55.624: E/AndroidRuntime(22486): java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 02-07 11:52:55.624: E/AndroidRuntime(22486): java.util で.ArrayList.remove(ArrayList.java:399)
カスタム シーンの GameLevelOneクラス内のコード:
// own override method
@Override
public void onSceneUpdate() {
registerUpdateHandler(new IUpdateHandler() {
@Override
public void onUpdate(float pSecondsElapsed) {
synchronized (this) {
try {
// ===get EasyEnemy List from it===
eIt = getEasyEnemyIterator();
while (eIt.hasNext()) {
ee = eIt.next();
if (ee.collidesWith(myFoodItem)) {
// Log.e("boolean value", ee.isCollisionActive
// + "");
if (ee.isCollisionActive) {
// call the sprite to
// move new direction
ee.giveNextDirection(ee);
unregisterTouchArea(ee);
decreaseFoodSize();
changeLife();
Log.e("!!!!Food !!!: ",
"Easy Enemy Touched My Food");
eIt.remove();
break;
}
}
}
scoreText.setText("Score:" + finalScore);
life_text.setText("Life:" + hitpoints + " %");
} catch (Exception e) {
Log.e("Gama Play Engine Error", "" + e);
}
}
}
@Override
public void reset() {
}
});
}
コードEasyEnemyクラス内。
public synchronized void giveNextDirection(final EasyEnemy e) {
clearEntityModifiers();
animate(new long[] { 110, 110, 110 }, 0, 2, true);
isCollisionActive = false;
try {
registerUpdateHandler(new TimerHandler(2.5f, new ITimerCallback() {
@Override
public void onTimePassed(TimerHandler pTimerHandler) {
// un reg. code
unregisterUpdateHandler(pTimerHandler);
// add a path Modifiers
registerEntityModifier(new PathModifier(5, getFinalPath(),
new IPathModifierListener() {
@Override
public void onPathWaypointStarted(
PathModifier pPathModifier,
IEntity pEntity, int pWaypointIndex) {
switch (pWaypointIndex) {
case 0:
// move the sprite to right angle
setRotation(270 + getAngle(xCurrent,
yCurrent, xFinal, yFinal));
break;
}
}
@Override
public void onPathWaypointFinished(
PathModifier pPathModifier,
IEntity pEntity, int pWaypointIndex) {
}
@Override
public void onPathStarted(
PathModifier pPathModifier,
IEntity pEntity) {
}
@Override
public void onPathFinished(
PathModifier pPathModifier,
IEntity pEntity) {
// ===== > remove from the list
GamePlayEngine.easyEnemyLinkedList.remove(e);
unregisterEntityModifier(pPathModifier);
// ==== > send it to pool
EasyEnemyPool.getSharedEasyEnemyPool()
.recyclePoolItem(e);
}
}));
}
}));
} catch (Exception e2) {
Log.e("Error", ""+e2);
}
}
問題を理解するために最善を尽くします。うまくいけば、誰かがそれを解決するためにスーパー ノックをプレイします。