在Flash游戏中管理游戏关卡的最佳方法是什么?

时间:2011-10-20 04:04:49

标签: flash actionscript-3

我还在学习,我正在尝试为我的第一个游戏(平台之一)设计游戏关卡。

我有一些直截了当的问题,因为我觉得我走错了路。

每个级别都应该有自己的类吗?

我试图做的方法是,当一个人完成第一个级别时,我设置为与该类相关的变量为空,取消注册所有事件并从舞台中删除所有子项,调用二级构造函数,而不声明任何变量,新level2();并设置为true为静态var“以便保存”该进度,以防一个人想要再次播放该级别。

但是我看到代码变得混乱,我遇到问题,内存管理问题太多了。

我在互联网上搜索了所有内容,但我找不到任何详细解释它的教程,所以我尝试了很多方法来实现我想要的东西,但现在我真的需要一些建议它不会迷路。

提前致谢。

2 个答案:

答案 0 :(得分:2)

我总是喜欢使用2D数组并编写2个函数:

  1. 将数组存储为字符串的函数
  2. 将字符串转换回2D数组的功能
  3. 这些函数将是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()创建对象。基本上,这里发生的是您将上面的objectobject2替换为您的类名。即:game.terrain.Grass#20#450
    • xy和任何其他自定义属性应用于上面创建的对象。
    • 将对象添加到游戏

    希望这会有所帮助。如果没有,请尝试使用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。如果实例之间可能存在重叠,则可以为每个级别保留单独的数组,例如,一个用于背景图形,一个用于舞台,一个用于敌人。