我还在学习,我正在尝试为我的第一个游戏(平台之一)设计游戏关卡。
我有一些直截了当的问题,因为我觉得我走错了路。
每个级别都应该有自己的类吗?
我试图做的方法是,当一个人完成第一个级别时,我设置为与该类相关的变量为空,取消注册所有事件并从舞台中删除所有子项,调用二级构造函数,而不声明任何变量,新level2();并设置为true为静态var“以便保存”该进度,以防一个人想要再次播放该级别。
但是我看到代码变得混乱,我遇到问题,内存管理问题太多了。
我在互联网上搜索了所有内容,但我找不到任何详细解释它的教程,所以我尝试了很多方法来实现我想要的东西,但现在我真的需要一些建议它不会迷路。
提前致谢。
答案 0 :(得分:2)
我总是喜欢使用2D数组并编写2个函数:
这些函数将是LevelManager
类的一部分,它也有一些这样的函数:
load(levelData:String):void
- 根据级别数据字符串加载级别unload():void
- 卸载当前级别swap(levelData:String):void
- 卸载当前级别,然后加载一个新级别 - 一个很好的函数来放入间歇动画。save():String
- 保存当前等级(循环显示当前存在的敌人并创建新的等级数据,将返回objectFromSnip(snip:String):void
- 从片段生成一个对象(即由字符串表示的单个对象 - 见下文)。我通常会在$
处拆开以下区域,然后遍历生成的属性集并在其上调用此函数。级别数据可能如下所示:
object#x#y$object2#x#y
其中$
表示对象的分隔,#
表示该对象的属性分隔。
这个数组的表示形式是:
[
[object, x, y],
[object2, x, y]
]
至于对象的创建,基本上你想要做的是:
getDefinitionByName()
创建对象。基本上,这里发生的是您将上面的object
和object2
替换为您的类名。即:game.terrain.Grass#20#450
x
,y
和任何其他自定义属性应用于上面创建的对象。希望这会有所帮助。如果没有,请尝试使用XML创建类似于上面的对象。
此外,您可以通过looking at my game here在实践中看到这种方法。
如果您使用关卡编辑器,您将能够在关闭屏幕上看到关卡数据,这可能与此类似:
2#36#20#o$t#12#12#w$t#12#16#w$t#12#24#w$t#12#28#w$t#12#20#w$g#20#11#o$1#24#21#o#200#110
关于每个对象的第一个属性的注释,这实际上代表一个更大的字符串,以保持关卡数据紧凑,即:
var shorthand:Object = {
2: "game.objects.WoodenWall",
g: "game.objects.Gate",
t: "game.objects.Turret"
};
等
答案 1 :(得分:0)
级别数据通常存储在2d数组中,例如:
level1=[[0,0,0,0,0],
[0,0,1,0,0],
[0,0,1,0,0],
[1,1,1,1,1]]
其中1代表地面而0代表什么都没有,因为可能是在屏幕中间有一座小山的平台游戏,或者是一个带有南墙的等距RPG。如果实例之间可能存在重叠,则可以为每个级别保留单独的数组,例如,一个用于背景图形,一个用于舞台,一个用于敌人。