2

ここには、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 を再利用する必要があります! 再起動するたびに!ではない?

解決済み: 新しいカメラの高さ/幅の問題が解決されました。

私はほとんどそれをやった。このコードには専門家の目が必要です。投稿を簡単にするために、一般的なコード ブロックは避けています。ありがとう。;)

投稿もここにあります:

4

3 に答える 3

2

リサイクル中に detachSelf() を呼び出す必要があります。または、親を null に設定することもできます。これで問題が解決します。:)

于 2013-05-02T07:17:15.043 に答える
1

私の意見では、onGameRestart() メソッドを使用してシーンをクリアすると、2 つのレイヤーもシーンから切り離されます。

したがって、次に createEasyEnemy() メソッドと createBullDozer() メソッドが01のインデックス要素にデータを追加するときのために。したがって、今回は 0 と 1 のインデックス要素はEntityではなく別のエンティティです。したがって、最初の実行と同じようにすべてのものを取得するには、最初にエンティティをアタッチする必要があります。

このため、最初の実行は完璧で、次回は問題が発生します。

于 2013-05-01T15:53:52.343 に答える
0

onGameRestart() メソッドから detachChildren(); を削除します。

于 2013-04-30T09:39:50.520 に答える