构建一个平铺游戏如何从外部加载关卡数据

时间:2011-06-14 11:47:04

标签: actionscript-3 external tiles

我正在制作一个包含3层“瓷砖”的基本瓷砖游戏

  • 瓷砖本身
  • 物件
  • 产品

图像游戏的维度为3x3我的数据阵列如下所示:

    public var tiles_Array:Array = 
    [   [1, 1, 1,],
        [1, 2, 1,], 
        [1, 1, 1,], 
    ];

    public var objects_Array:Array = 
    [   [1, 3, 1,],
        [5, 4, 1,], 
        [1, 7, 1,], 
    ];

    public var items_Array:Array = 
    [   [1, 1, 1,],
        [1, 1, 8,], 
        [5, 1, 1,], 
    ];

我有两个问题:

  • 如何从外部文件中加载此数据,该文件易于为级别设定者编辑? (什么是最好用,xml,json,......?)
  • 使用1个数据文件而不是3个并不是更好,这是最好的方法吗?

3 个答案:

答案 0 :(得分:2)

这是我的意见。

每个加载文件操作都在操纵字符串(字符集),因此使用纯字符串优于任何其他格式。对于XML,Actionscript具有内置函数,用于将读取字符串解析为XML类型的变量。用于从字符串解析JSON格式的库也可以在Internet上的某个地方使用。但是它们都需要额外的资源。

对于您的情况,我建议如下解决方案:

_配置文件存储如下字符串:

1,1,1,1,2,1,1,1,1
1,3,1,5,4,1,1,7,1
1,1,1,1,1,8,5,1,1

_在您的应用程序中,您需要两个步骤来解析配置文件: +通过使用换行符分割文件数据将文件解析为一组级别

var levels:Array = fileData.split("\n");
  • 再次拆分每个级别以接收实际数组

    var level1:Array = levels [0] .split(“,”);

希望得到这个帮助。

答案 1 :(得分:1)

1)我认为最好使用CSV(逗号分隔值)格式来指定2d数组。例如。指定tiles_array.csv的{​​{1}}文件类似于以下内容:

tiles_Array

2)恕我直言,对于关卡设计师来说,拥有3个单独的文件会更方便

答案 2 :(得分:0)

对于关卡数据,您列出的任何文件格式都可以使用。我经常使用XML,但这主要是因为Flash具有处理XML的内置命令,因此解析起来更方便。通过免费提供的库,JSON也可以正常工作,或者您可以使用简单的字符串命令滚动自己的文件格式并解析它。最后,只要您选择的文件格式足够灵活,以适应不可避免的未来扩展(例如,您已经为游戏添加了新类型的实体),这并不重要。

将单独的数据存储为单独的文件几乎总是更好,因为这样可以更灵活地管理文件。我能想到的一个例外是,如果你想将级别数据存储在数据库中,这是一种非常罕见的情况。我个人从未这样做,但我知道这对于用户生成的关卡的在线游戏来说是有意义的。

实际加载文件是使用URLLoader完成的,如下所述:http://www.kirupa.com/developer/flashcs3/using_xml_as3_pg2.htm

(注意:这仅适用于单独的平面文件。存储在数据库中的级别需要完全不同的工作流程,包括对服务器上的后端代码进行GET请求。)

对于编辑数据,关卡设计人员永远不应该直接查看XML(或JSON或CSV或其他)数据,而是编写一个关卡编辑器供他们使用,而编辑器会有命令加载和节省水平。如果您正在使用Air,那么您可以直接保存文本文件,但即使没有它,您也可以让编辑器将数据转储到可以粘贴到文件中的文本字段。