【问题标题】:Convert input text to 2d array将输入文本转换为二维数组
【发布时间】:2014-02-04 17:45:31
【问题描述】:

我正在尝试为游戏制作关卡编辑器。 现在我可以创建一个新地图(使用鼠标)并单击“生成”按钮来跟踪地图数组 (细绳)。之后,我可以简单地从输出中复制代码 并用它来创建一个新的关卡。

假设我有一个名为 NewLevel.as 的类

我创建了一个新数组并从输出窗口粘贴代码,所以我有二维数组。 然后使用 for 循环将图块添加到舞台。

var array:Array = 
// code below is what I get in output window
[ 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7],
[7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7]
];

for (var row:int = 0; row < array.length; row++)
{
for (var column:int = 0; column < array[row].length; column++)
{
    var tile = new Tile();
    addChild(tile);
    tile.x = column * tile.width;
    tile.y = row * tile.height;
    tile.gotoAndStop(array[row][column] +1);
} 
}

它没有问题,这给了我使用关卡编辑器创建的地图。 但我想要的是玩家输入他们的“地图代码”并加载他们创建的地图。 我想你已经在很多游戏中看到了这一点。

我有一个文本区域,所以用户可以输入他们的字符串, 如何将他们的输入转换为二维数组并加载它(如您在示例中看到的)? 应该是二维数组。

我还在 textarea 中添加了事件监听器

textarea.addEventListener(Event.CHANGE, changes);

function changes(e:Event):void
{
    // convert input text to 2d array to build a new map

// Do not know how to get input to use with JSON
var myStr = levelTextarea.text;

var a2:Array = JSON.parse(myStr) as Array;
trace( a2 );
}

【问题讨论】:

  • 如果您展示如何加载该级别,我也可以接受一维数组。
  • 只需将数组输入为每个子数组的单行。然后在 "\r\n" 上分割输入,并用 "," 分割每一行。
  • 我不懂split函数,你能写个代码吗?另一个问题是我不知道如何将输入数组设为单行,我可以更新代码,你会看到我是如何获得二维数组作为输入的。

标签: actionscript-3 flash actionscript tile


【解决方案1】:

您可以将 JSON 用于此类作业,此类在 Flash Player 11 中可用。

package 
{
    import flash.display.Sprite;
    import flash.events.Event;

    /**
     * ...
     * @author 
     */
    public class Main extends Sprite 
    {

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            var a:Array = [ 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7],
[7, 7, 7, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7]
];

            var txt:String = JSON.stringify( a )
            trace( txt );

            var a2:Array = JSON.parse( txt ) as Array;
            trace( a2 );


        }

    }

}

【讨论】:

  • 我以前从未使用过 JSON,但我尝试了你所说的。实际上我没有:数组,我只有一个看起来像二维数组的字符串。所以我试图让 array = JSON.parse(myString) as Array;我得到了这个错误:调用一个可能未定义的方法,通过一个静态类型类的引用来解析。
  • 你可能在 11 之前的 SWF 版本中编译。你用什么编译?
  • 是的,对不起,我忘了我在玩不同的设置。我照你说的做了,但出现错误“无效的 JSON 解析输入”。
  • 你描述的关卡图是[ [0,0,0,0], [0,0,0,0]], "array",你可以在我的第一篇文章中看到。
  • 啊哈哈,终于可以接受你的回答了,你活该。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 2020-03-26
  • 2012-08-15
  • 2015-05-28
相关资源
最近更新 更多