检查MC的放置位置

时间:2011-08-25 11:47:22

标签: actionscript-3

为了好玩(和学习)我在AS3中创建一个随机地形生成器。我遇到的问题是试图找出哪种类型的瓷砖(草,石头等)在哪里。我需要知道哪些瓷砖在哪里可以说出类似的东西:如果上面的空白瓷砖和下面的石头添加草砖。

目前我只有一个while循环经过并添加了瓷砖和一个不可见的MC(objectCheck)穿过地形,我打算用这个objectCheck来检查地形。但是我如何制作这个while循环还要检查它上面和上面和下面的瓷砖?希望这很清楚,我缺乏解释能力!

    function terrainChecker(){

        if(terrainCheckX < 200){
            while(terrainCheckY > 0){
                terrainCheckY -= blockSize;
                createTerrain();
                objectTypeChecker();
            }

        terrainCheckX += blockSize;
        terrainCheckY = depth;

        terrainChecker();

        }

    }
    function objectTypeChecker(){
        objectCheck.x = terrainCheckX;
        objectCheck.y = terrainCheckY;

    }

1 个答案:

答案 0 :(得分:3)

最好的想法是保持瓷砖的清晰模型,并构建一个单独的视图层来渲染它。

示例:

interface Tile {
    function get typeID():String;
}
class Water implements Tile {
    public function get typeID():String {
         return TYPE;
    }
    static public const TYPE:String = "water";
}
class Sand implements Tile {
    public function get typeID():String {
         return TYPE;
    }
    static public const TYPE:String = "sand";
}

现在地图看起来像这样(这是硬编码的,但你也可以生成它):

var map:Array = [
    [new Water, new Sand, new Sand, new Water],
    [new Water, new Sand, new Sand, new Water],
    [new Water, new Sand, new Sand, new Water],
    [new Sand, new Sand, new Water, new Water]
]

它可以呈现为:

var colors:Object = { water: 0x0000FF, sand: 0xFFFF00 };
const size:Number = 20;
for (var y:int = 0; y < map.length; y++) {
    var row:Array = map[y];
    for (var x:int = 0; x < row.length; x++) {
        beginFill(colors[Tile(row[x]).typeID]);
        drawRect(x * size, y * size, size, size);
    }
}

当然这很简单,但它应该给你一个想法。

如果您想检查哪种瓷砖位于哪个位置,您只需查看地图即可。