在flash游戏中管理游戏级别的最佳方法是什么?
我还在学习,我正在尝试为我的第一个游戏(平台游戏)设计游戏级别 我有一些直截了当的问题,因为我觉得我走错了方向 每个级别都应该有自己的级别吗? 我尝试的方法是,当一个人完成第一个级别时,我将该类的变量设置为null,取消注册所有事件并从阶段中删除所有子级,调用第二个级别的构造函数,而不声明任何变量new level2();并将静态变量设置为true,以“保存”该进度,以防再次使用该级别 然而,我看到代码变得凌乱,我遇到了问题,内存管理非常重要。 我在互联网上到处搜索,但我找不到任何详细的教程来解释它,所以我尝试了很多方法来实现我想要的,但现在我真的需要一些关于它的建议,以免迷路在flash游戏中管理游戏级别的最佳方法是什么?,flash,actionscript-3,Flash,Actionscript 3,我还在学习,我正在尝试为我的第一个游戏(平台游戏)设计游戏级别 我有一些直截了当的问题,因为我觉得我走错了方向 每个级别都应该有自己的级别吗? 我尝试的方法是,当一个人完成第一个级别时,我将该类的变量设置为null,取消注册所有事件并从阶段中删除所有子级,调用第二个级别的构造函数,而不声明任何变量new level2();并将静态变量设置为true,以“保存”该进度,以防再次使用该级别 然而,我看到代码变得凌乱,我遇到了问题,内存管理非常重要。 我在互联网上到处搜索,但我找不到任何详细的教程来解
提前感谢。级别数据通常存储在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。如果实例之间可能存在重叠,您可以为每个级别保留单独的数组,例如一个用于背景图形,一个用于舞台,一个用于敌人。
我一直喜欢使用2D数组并编写两个函数:LevelManager
类的一部分,该类还将具有以下函数:
object#x#y$object2#x#y
-基于级别数据字符串加载级别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]
]
至于对象的创建,基本上您要做的是:
- 用于创建您的对象。基本上,这里发生的是您将用您的类名替换上面的
和object
。即:object2
game.terrain.Grass#20#450
- 将
、x
和任何其他自定义属性应用于上面创建的对象y
- 将对象添加到游戏中
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"
};
etc您可能会在上得到更专业的答案-您还需要更具体地了解您的游戏架构和游戏风格,因为存储级别的方法可能会因这些不同而有所不同。级别1应该扩展级别,级别2应该扩展级别…..正如所想:)我喜欢阿斯曼的方法。创建一个包含泛型属性的超类,并使用子类专门化每个级别。如果所有级别都采用相同的格式,则有一个级别类从XML文件中获取其参数。它还有一个额外的好处,就是能够快速更改任何级别,并使您的编码生活变得更加轻松