我目前正在使用AS3创建一个Flash游戏,目前已达到用户能够使用键盘让玩家角色在舞台上移动的程度。在编写游戏时,我目前有两个具有独特名字的敌人被添加到舞台上。
此刻我所坚持的是检测玩家最接近的敌人,并让该敌人旋转并向玩家移动。
public function updateEnemies(player:MovieClip):void{
//run a for loop on our array and update every enemy object in there
for(var i = 0; i < enemyObjectsArray.length; i++){
var enemy:Object = enemyObjectsArray[i];
//calculate distance between enemyObject's movieClip and target
enemy.distanceX = player.x - enemy.myMc.x;
enemy.distanceY = player.y - enemy.myMc.y;
enemy.distanceTotal = new Point(enemy.myMc.x - player.x, enemy.myMc.y - player.y);
trace(enemy.distanceTotal);
//sort the array based on the enemy object's "distanceTotal" parameter
enemyObjectsArray.sortOn("distanceTotal", Array.NUMERIC);
enemyObjectsArray[0].myMc.rotation = 10;
}
}
答案 0 :(得分:1)
如果你给你的Enemy Class一个_distance属性并访问_player实例,每个敌人的距离属性可以通过以下方式计算:
_distance = Vector3D(x - _player.x, y - _player.y, z - _player.x);
然后,如果您的敌人在阵列中,您可以按距离属性对阵列进行排序:
_enemies.sortOn("distance", Array.NUMERIC);
以上假设你的敌人类有_distance的'getter'方法。最近的敌人将是_enemies [0]或_enemies [_enemies.length-1],具体取决于排序是升序还是降序。
这也假设您正在使用3维,但在2D中您可以使用Point而不是Vector3D。
顺便说一下,一旦你确定哪个敌人最接近,你可以在敌人的实例上调用一个方法(例如,seekPlayer)来设置它向玩家移动。