我目前正在as3中建立游戏;我现在所处的问题是,当我滚动虚拟骰子时,玩家(标记)在整个棋盘上移动,但我需要知道的是:有没有办法找到玩家登陆的对象(框)的实例名称上?
抱歉我的英语不好。
答案 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..
}