AS3 Определение, какой объект перекрывает его? - PullRequest
0 голосов
/ 02 ноября 2011

Я сейчас создаю игру в as3; у меня сейчас есть проблема, когда я бросаю виртуальные кости, игрок (маркер) перемещается по доске, но мне нужно знать: есть ли способ найти имя экземпляра объекта (коробки), который приземлился игрок на

И извините, мой английский не очень хорош.

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Многое зависит от того, как выложена ваша доска. Один из способов - поместить все объекты, на которые ваш игрок может приземлиться, в массив, а затем проверить координаты игрока по осям x и y, чтобы увидеть, попадают ли они внутрь коробки каждого объекта.

Например:

var boardObjects:Array; // This would contain references to all the objects the 
    // player object might land on. Initialize it, then use boardObjects.add(object) 
    // on each one until they're all in the array.

// once the player has moved:
for(var i:int = 0; i < boardObjects.size; i++) {
    var obj:* = boardObjects[i];
    if (player.x >= obj.x && player.x <= obj.x + obj.width) {
        if (player.y >= obj.y && player.y <= obj.y + obj.height) {
            // If these if statements are all true, the Player's top-left corner
            // is inside the object's bounding box. If this is a function,
            // here is a good spot to put a return statement.
        }
    }
}

Вы можете рассчитать его на основе середины игрока, а не его верхнего левого угла, в этом случае просто добавьте половину ширины игрока к его позиции x и половину его высоты к их позиции y.

0 голосов
/ 02 ноября 2011

Для производительности (и избегания ненужного кода), если это основано на плитке / кубике, почему бы не сделать что-то подобное

private function rollDice(){
    var results:Array = [Math.ceil(Math.random() * 6), Math.ceil(Math.random() * 6)] //Accurately simulates two 6 sided dice
    dice1.rollAnimation(results[0]);
    dice2.rollAnimation(results[1]);
    player.position += results[0] + results[1];
}

Доска будет массивом, и в Player вы можете использовать геттеры / сеттеры, чтобы «обернуть» доску следующим образом

private var _position:int = 0;
public function get position():int{
    return _position;
}
public function set position(value:int){
    _position = value;
    while(_position > GameBoard.TILES){
        _position -= GameBoard.TILES;
    }
    x = //Whatever you determine the positioning of the player..
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...