0

嗨,我正在制作一个游戏平台。它具有背景图像,例如带有门,物品等的房间。现在,每当玩家尝试点击门或楼梯时,它都会更改/过渡到另一个背景/地图。
那么,在性能方面,最好的方法是什么?我计划制作 50 个关卡,这意味着 50 个不同的背景图像。
我应该使用数组方法吗?或者只是将它们扔到舞台上并在转换发生时使可见=真?还是其他最好的方法?谢谢大家。

4

1 回答 1

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().

于 2013-10-02T06:33:15.110 回答