Проверка места размещения MC - PullRequest
0 голосов
/ 25 августа 2011

Для развлечения (и для обучения) я создаю случайный генератор ландшафта в 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 Ответ

3 голосов
/ 25 августа 2011

Лучшая идея - сохранить четкую модель ваших плиток и создать отдельный слой вида для ее рендеринга.

Пример:

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

Конечно, это очень упрощено, но должно датьидея.

И если вы хотите проверить, какой тип плитки находится в какой позиции, вы можете просто посмотреть на карту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...