AS3确定哪个对象重叠?

时间:2011-11-02 01:40:53

标签: actionscript-3

我目前正在as3中建立游戏;我现在所处的问题是,当我滚动虚拟骰子时,玩家(标记)在整个棋盘上移动,但我需要知道的是:有没有办法找到玩家登陆的对象(框)的实例名称上?

抱歉我的英语不好。

2 个答案:

答案 0 :(得分:2)

这很大程度上取决于您的电路板布局。一种方法是将玩家可以登陆的所有物体放入一个阵列中,然后检查玩家的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位置。

答案 1 :(得分:0)

为了表现(并避免不必要的代码),如果它是基于图块/骰子,为什么不做这样的事情

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

电路板是一个数组,在播放器中你可以使用getter / setter来“封装”这样的电路板

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..
}