As3:从哪里开始学习如何使用基于图块的地图/代码?

时间:2014-03-14 00:06:04

标签: actionscript-3 resources grid editor tile

我在网上搜索了一个很好的教程,它教你制作带有图块(XML)的地图的基础知识。

我已经搜索了几个星期,我还没有找到一个好的学生,将学生视为一个完整的初学者。

我观看过一些视频,但是从一开始就没有一个视频。我不想使用像Flashpunk这样的东西,因为我想学习如何自己动手。

TonyPa的教程只教你如何使用数组,但是你如何学习如何将XML文件翻译成在舞台上放置实际的图块?我很困惑这很疼。

我有Tiled(编辑器)和Flash cs6。我从哪里开始?

编辑:我知道如何使用2D数组,但不知道如何使用XML(我想用平铺地图编辑器制作地图)

奖金问题:

我在下面尝试了您的建议,第一帧的总代码如下:

var map:Array = [
[1,1,1,1,1],
[1,0,0,0,1],
[0,0,0,0,1],
[1,0,0,0,1],
[1,1,1,1,1]
];

loadMap(map, 120);

function loadMap(map:Array, cellSize:int = 120):void
{
for(var row:int = 0; row < map.length; row++)
{
    for(var column:int = 0; column < map[row].length; column++)
    {
        var data:int = map[row][column];


        var object:Sprite;

        if(data === '0') object = new Bg();
        if(data === '1') object = new Ground();


        if(object !== null)
        {
            object.x = column * cellSize;
            object.y = row * cellSize;
            stage.addChild(object);
        }
    }
}
}

我在库中有两个对象,链接名称为“Bg”和“Ground”。

我收到以下错误:

Scene 1, Layer 'Layer 1', Frame 1, Line 22  1176: Comparison between a value with static type int and a possibly unrelated type String.

Scene 1, Layer 'Layer 1', Frame 1, Line 22  1067: Implicit coercion of a value of type Bg to an unrelated type flash.display:Sprite.

Scene 1, Layer 'Layer 1', Frame 1, Line 23  1176: Comparison between a value with static type int and a possibly unrelated type String.

Scene 1, Layer 'Layer 1', Frame 1, Line 23  1067: Implicit coercion of a value of type Ground to an unrelated type flash.display:Sprite.

2 个答案:

答案 0 :(得分:1)

对于初学者,我会忘记XML并考虑使用2D数组。 2D阵列非常适合基于2D图块的地图,因为它们可以提供您所需要的 - 一组二维数据。在我看来,XML对于这项任务来说太过分了。

2D阵列的解剖结构是:

var map:Array = [ [] ];
//                ^^ An array inside the outer array.

可以访问:

var inner:Array = map[0];

访问嵌套数组中的数据的语法是使用连续的[]访问运算符,因此如果内部数组包含一些这样的数据:

var map:Array = [ [1] ];

你会使用:

trace( map[0][0] ); // 1

现在,构建2D阵列和2D地图之间的关系。 2D数组背后的概念是子数组的索引是行(y位置),这些数组中元素的索引代表列(x位置)。通过编写如下所示的级别数据,可以轻松实现这一点:

var map:Array = [
    [0,0,0],
    [0,0,0],
    [0,0,0]
];

这显然代表了一个3x3级别,可视化地转换为在读取数据并将其转换为屏幕上的实际对象时如何实际布局地图。

这些数组中的数据用于表示地图上的这些对象。在典型情况下,0表示地图上的空图块。我们可以使用1来表示类似Wall的内容,并使用2来表示玩家的起始位置:

var map:Array = [
    [1,1,1,1,1],
    [1,0,0,0,1],
    [0,0,0,2,1],
    [1,0,0,0,1],
    [1,1,1,1,1]
];

这表示外边缘几乎完全被挡住的地图,玩家从右上角附近开始。

至于实际使用这些数据,这样的事情会让你开始:

function loadMap(map:Array, cellSize:int = 20):void
{
    for(var row:int = 0; row < map.length; row++)
    {
        for(var column:int = 0; column < map[row].length; column++)
        {
            var data:int = map[row][column];

            // Empty tile, move onto the next item.
            if(data === 0) continue;


            var object:Sprite;

            if(data === 1) object = new Wall();
            if(data === 2) object = new Player();

            if(object !== null)
            {
                object.x = column * cellSize;
                object.y = row * cellSize;
                stage.addChild(object);
            }
        }
    }
}

答案 1 :(得分:0)

这是关于基于平铺的游戏的最佳来源之一。它有点旧,但它涵盖了开始使用瓷砖所需的所有理论:

http://www.tonypa.pri.ee/tbw/index.html