最实用的创建游戏关卡的方法(地图)?

时间:2013-10-01 17:51:51

标签: actionscript-3 flash-cs5

嗨,我正在制作一个类似的游戏平台。它有像门,物品等房间的背景图像。现在,只要玩家试图点击门或楼梯,它就会改变/转换到另一个背景/地图 那么,在性能方面做到这一点的最佳方法是什么?我打算制作50个等级,这意味着50个不同的背景图像 我应该使用数组方法吗?或者只是将它们扔进舞台并在转换发生时使visible = true?还是其他最好的办法呢?谢谢大家。

1 个答案:

答案 0 :(得分:1)

您要做的是将您的关卡存储在某处。除非您实际正在播放相关级别,否则您不希望存在属于所有级别的对象。这将导致大量的内存消耗和处理能力使用,主要用于甚至不相关的对象。

您需要做的第一件事是确定要用于存储关卡数据的数据格式。 XML非常受欢迎,因为它非常具有表现力。我个人使用JSON,或者在某些情况下使用自定义的专用格式,这个格式要小一些。

您需要做的下一件事是确定要在级别数据中存储哪些信息。通常,您希望存储对象类型及其位置。有时您可能会发现需要存储额外信息 - 例如,您的门的数据可能需要引用它们在您输入时将加载的级别。

以下是一些JSON级别数据的示例:

{
    id: 1,
    name: 'Level 1',
    objects: [
        { type: 'Wall', x: 20, y: 20 },
        { type: 'Door', x: 40, y: 20, destinationLevel: 2 }
    ]
}

最后,您需要构建一些消化数据的类,并生成构成您的关卡的对象。这可能听起来有点面对,但实际上它非常简单。获取关卡数据并从中生成对象的简单函数的示例可能如下所示:

function generateLevel(decodedJSON:Object):Array
{
    var levelContent:Array = [];

    for each(var i:Object in decodedJSON.objects)
    {
        var Inst:Class = getDefinitionByName(i.type) as Class;
        var object:Sprite = new Inst();

        object.x = i.x;
        object.y = i.y;

        levelContent.push(object);
    }

    return levelContent;
}

注意:此处的关键是getDefinitionByName()