ここには、easyEnemy と bullDozer の 2 つのスプライトがあります。easyEnemy は毎秒スポーンします。そのために時間ハンドラを使用します。ブルドーザーはランダムな時間に 1 回だけ来ます。
編集:
easyEnemy を再利用するためにジェネリック プールを使用します。再起動すると、再利用のためにそれらをプールに送信します。ブルドーザーの場合は、通常の手順を使用します。
何よりもブルドーザーを見せたい easyEnemy. そのために2つのレイヤーを作成します。のように: ゲームシーン内:
final int FIRST_LAYER = 0;
final int SECOND_LAYER = 1;
// i call this very first entities in scene
public void createLayers() {
attachChild(new Entity()); // First Layer
attachChild(new Entity()); // Second Layer
}
私は createLayers() をシーンの最初のエンティティと呼びますが、明らかに 1 回だけ呼び出します。次のようなシーンで easyEnemy と bulldozer の両方を取り付けます。
// it is called in every seconds inside time handler
getChildByIndex(FIRST_LAYER).attachChild(aEasyEnemy);
// it is called only once
getChildByIndex(SECOND_LAYER).attachChild(aBulldozer);
初めてでも問題なく動作します。ブルドーザーは easyEnemy の上を移動します。:)
問題:
ゲームを再起動すると、ブルドーザーだけが最初にスケーリングされます。しかし、私はスケーリングされたブルドーザーではありません。ブルドーザーが現場を通り過ぎた後、簡単な敵がやってきます。また、カメラの高さと幅もデバイス内で短くなります。動作は最初の実行と同じではありません。再起動で何をしますか? コードは以下です。
更新しました:
public void onGameRestart() {
if (hasChildScene()) {
clearChildScene();
detachChildren();
clearTouchAreas();
clearEntityModifiers();
clearUpdateHandlers();
reset();
back();
// sorry I recycle easy Enemy by using pool
recycleEasyEnemy();
// create layers again
createLayers();
// call to come again
createEasyEnemy(.6f, 28f, 28f);
createBullDozer();
}
}
更新: recycleEasyEnemy コードは次のとおりです。
public void recycleEasyEnemy() {
// send them to pool for reuse
for (EasyEnemy e : easyEnemyLinkedList) {
EasyEnemyPool.getSharedEasyEnemyPool().recyclePoolItem(e);
}
easyEnemyLinkedList.clear();
}
以前に私の recycleEasyEnemy コードを表示できなかったことをお詫びします。このバージョンを実行した後、問題が 1 つだけ残っています。それは、再起動時にブルドーザーがシーンを通過した後に Easy Enemy が発生することです。
注意: recycleEasyEnemy を呼び出していないときは、最初の実行のように正常に動作します。しかし、私は easyEnemy を再利用する必要があります! 再起動するたびに!ではない?
解決済み: 新しいカメラの高さ/幅の問題が解決されました。
私はほとんどそれをやった。このコードには専門家の目が必要です。投稿を簡単にするために、一般的なコード ブロックは避けています。ありがとう。;)
投稿もここにあります: