近距离让敌人转向玩家

时间:2013-10-03 11:36:41

标签: 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(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;
    }

}

1 个答案:

答案 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)来设置它向玩家移动。
为了让敌人检查它是否面向玩家,我建议使用Math.atan2((相对y坐标),(相对x坐标))来获得玩家的角度(注意atan2使用y坐标)首先,角度'0'在'3'''。