1

プロジェクト用に Flash で 2D プラットフォーマーを作成していますが、すべて順調に進んでいます。割り当てで 2 つのレベルを使用するように指示されていることに気付くまでは、簡単に航海できました。レベルを実行した唯一の方法は、このプロジェクトで配列を使用している間、レベルをクラスとして追加することです。

URLLoader を使用して .txt ファイルのレベルをプロップし始めましたが、それでも私が従ってきたサンプル コードは、2 つ以上ではなく、1 つのレベルに対してのみこれを行う方法を示しています。

マップに使用しているコードは次のとおりです。これで十分でない場合は、さらに追加できます。

    public function init()
    {
        trace("init");

        map = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
                [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
                [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0],
                [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0],
                [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
                [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
                [0, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 0],
                [0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0],
                [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
                [0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0]]

                container = new Sprite();
                addChild(container);
                tileArray = [Tile0, Tile1, Tile2];
                buildMap();
                createPlayer();
                createWinSpace();
                ArrowKeyInput.init(stage);
                addEventListener(Event.ENTER_FRAME, update);
    }
    private function buildMap():void
    {
        trace("BUILD");
        tileMap = [];
        for (var i:int = 0; i < map.length; i++) 
        {
            var row:Array = map[i];
            var tileRow:Array = [];
            tileMap.push(tileRow);
            for (var j:int = 0; j < row.length; j++) 
            {
                var tileNum:int = row[j];
                var className:Class = tileArray[tileNum];
                var tile:MovieClip = new className();
                tile.width = tile.height = TILE_SIZE;
                tile.x = TILE_SIZE * j;
                tile.y = TILE_SIZE * i;
                container.addChild(tile);
                tileRow.push(tile);
            }
        }
    }

これに関して得られるあらゆる種類のフィードバックに感謝します。

4

1 に答える 1

0

私の理解が正しければ、buildMap 関数で複数のマップを作成できるようにする方法を知りたがっています。

この問題について理解しておくべき重要な点は、マップ配列が buildMap 関数がレベルを構築するためのデータとして利用するものであるということです。したがって、マップ配列にあるものは、レベルの各場所で使用されるタイルを定義します。したがって、複数のレベルが必要な場合は、それぞれが独自の配列を持つように複数のマップを定義できます。

    map_1 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
            [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
            [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0],
            [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0],
            [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
            [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
            [0, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 0],
            [0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0],
            [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
            [0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0]];

    map_2 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
            [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
            [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0],
            [0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 2, 2, 2, 0, 0, 0, 0],
            [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
            [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
            [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
            [0, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 1, 0, 2, 2, 0, 1, 1, 1, 0],
            [0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0],
            [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
            [0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0]];

これらはマップ定義であり、好きなだけ持つことができます。2 番目のマップのデータをコピーしたところですが、その定義で新しいレベルを作成するだけです。

ここで、buildMap() 関数を呼び出す前に、ビルドしたいレベルに map の値を設定するだけです:

map = map_1;
buildMap();

また

map = map_2;
buildMap();

ここで、map_1 から始めてから map_2 を構築したい場合、map_1 の構築に使用したタイルを削除する必要がある場合、他に考慮すべきことがあります。

コードでわかることから、それらはすべてコンテナ スプライトに追加されます。したがって、buildMap() 関数の先頭に次のようなものを追加して、これらのタイルをすべて削除することができます。

while (container.numChildren > 0)
{
    container.removeChildAt(0);
}

ほとんどの場合、新しいレベルをロードするときにリセットする必要がある他の変数がありますが、これは、コードを見てわかっていることはほとんどなく、それを管理する方法の 1 つの例にすぎません。

于 2012-12-05T03:01:28.930 に答える