2011-08-25 56 views
0

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

目前我只有一个while循环,并通过地形添加了tile和一个隐形的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; 

    } 

回答

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); 
    } 
} 

当然这是非常简单的,但它应该给你一个想法。

如果你想检查哪一种瓷砖在哪个位置,你可以简单地在地图上查看。