1

我正在为一个项目在 Flash 中制作一个 2D 平台游戏,一切都很顺利!在我意识到作业说要使用 2 个级别之前,一直很容易向上航行,而我完成级别的唯一方法是将它们添加为类,而这个项目正在使用数组。

我开始使用 URLLoader 在 .txt 文件中添加关卡,但即便如此,我一直在关注的示例代码也只显示了如何为一个关卡执行此操作,而不是为 2+ 个关卡。

这是我用于地图的代码,如果这还不够,我可以提供更多:

    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]];

这些是您的地图定义,您可以拥有任意数量的地图。我刚刚复制了第二张地图的数据,但您可以在该定义中创建一个新级别。

现在,在调用 buildMap() 函数之前,只需将 map 的值设置为您希望构建的任何级别:

map = map_1;
buildMap();

或者

map = map_2;
buildMap();

现在,您还有其他事情要考虑,就好像您从 map_1 开始然后想要构建 map_2,您需要移除用于构建 map_1 的图块。

从我在您的代码中可以看出,它们都已添加到容器精灵中。因此,您可以通过在 buildMap() 函数的开头添加类似这样的内容来删除所有这些图块:

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

很可能还有其他变量需要在加载新关卡时进行重置,但这只是作为您可以管理的一种方式的示例,通过查看您的代码我知道的很少。

于 2012-12-05T03:01:28.930 回答