为了好玩(和学习)我在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;
}
答案 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);
}
}
当然这很简单,但它应该给你一个想法。
如果您想检查哪种瓷砖位于哪个位置,您只需查看地图即可。