Actionscript 3 靠近玩家时使敌人转向玩家

Actionscript 3 靠近玩家时使敌人转向玩家,actionscript-3,flash,Actionscript 3,Flash,我目前正在使用AS3创建一个Flash游戏,目前已经达到用户可以使用键盘让玩家角色在舞台上移动的程度。我现在有两个敌人,在编译游戏时,他们的名字都是独一无二的 我现在坚持的是检测玩家最接近的敌人,并且只让敌人旋转并向玩家移动 public function updateEnemies(player:MovieClip):void{ //run a for loop on our array and update every enemy object in there for(v

我目前正在使用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;
    }

}
public function updateEnemies(播放器:MovieClip):无效{
//在我们的阵列上运行for循环并更新那里的所有敌人对象
对于(var i=0;i
如果您给予敌人a类距离属性并访问玩家实例,则每个敌人的距离属性可以通过以下公式计算:

_distance = Vector3D(x - _player.x, y - _player.y, z - _player.x);
然后,如果您的敌人在阵列中,您可以按距离属性对阵列进行排序:

_enemies.sortOn("distance", Array.NUMERIC);
以上假设你有一个“getter”方法来计算敌方职业的距离。最近的敌人将是_敌人[0]或_敌人[_敌人.长度-1],这取决于排序是升序还是降序

这也假设您在三维中工作,但在二维中可以使用点而不是矢量三维

顺便说一句,一旦你确定哪一个敌人离你最近,你就可以在敌人的实例上调用一个方法(例如,追踪者),将其设置为向玩家移动。

为了让敌人检查它是否朝向玩家,我建议使用Math.atan2((相对y坐标),(相对x坐标))来获取玩家的角度(注意,atan2首先使用y坐标,角度“0”在“3点钟”)。

Hi moosefetcher。谢谢你的帮助和代码。我实现了你建议的代码并追踪了距离。然而,因为我在舞台上有两个敌人,所以距离会勾勒出两个敌人的X和Y坐标。我用检测最近敌人的方法更新了我的问题。您需要从更新EnemoBejCtsArray的循环外部对其进行排序。另一个是,你没有一个“距离”属性,每个敌人都可以在该循环之外访问。您需要为每个敌人对象添加距离属性。