Jujunol
Jujunol

Reputation: 459

AS3 Determining what object overlaps it?

I'm current building a game in as3; the proplem I have right now is when I roll the virtual dice, the player(marker) moves accross the board but what I need to know is: is there a way to find the instance name of the object(box) that the player lands on?

And Sorry my english isn't good.

Upvotes: 0

Views: 578

Answers (2)

apscience
apscience

Reputation: 7263

For performance (and avoiding unnecessary code), if it's tile based / dice why not do something like this

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

The board would be an array, and in Player you can use getters/setters to 'wrap' the board like this

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

Upvotes: 0

Marsh
Marsh

Reputation: 8145

It depends a lot on how your board is laid out. One way is to put all of the objects your player can land on into an array, then check the player's x and y coordinates to see if they fall inside of each object's box.

For example:

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

You may want to calculate it based on the middle of the player rather than their top-left corner, in which case just add half the player's width to their x position and half their height to their y position.

Upvotes: 2

Related Questions