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