Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在flash游戏中管理游戏级别的最佳方法是什么?_Flash_Actionscript 3 - Fatal编程技术网

在flash游戏中管理游戏级别的最佳方法是什么?

在flash游戏中管理游戏级别的最佳方法是什么?,flash,actionscript-3,Flash,Actionscript 3,我还在学习,我正在尝试为我的第一个游戏(平台游戏)设计游戏级别 我有一些直截了当的问题,因为我觉得我走错了方向 每个级别都应该有自己的级别吗? 我尝试的方法是,当一个人完成第一个级别时,我将该类的变量设置为null,取消注册所有事件并从阶段中删除所有子级,调用第二个级别的构造函数,而不声明任何变量new level2();并将静态变量设置为true,以“保存”该进度,以防再次使用该级别 然而,我看到代码变得凌乱,我遇到了问题,内存管理非常重要。 我在互联网上到处搜索,但我找不到任何详细的教程来解

我还在学习,我正在尝试为我的第一个游戏(平台游戏)设计游戏级别

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

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

我尝试的方法是,当一个人完成第一个级别时,我将该类的变量设置为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
      和任何其他自定义属性应用于上面创建的对象
    • 将对象添加到游戏中
    希望这有帮助。如果没有,请尝试使用XML创建类似于上述内容的对象

    此外,您可以在实践中看到这种方法

    如果使用关卡编辑器,您将能够在关闭屏幕上看到关卡数据,该屏幕可能与以下类似:

    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文件中获取其参数。它还有一个额外的好处,就是能够快速更改任何级别,并使您的编码生活变得更加轻松