0

我正在尝试在 AS3 中制作类似塔防的游戏,目前无法找到解决方案来检查数组中哪个项目的敌人与炮塔之间的距离值较低,以便选择首先攻击哪个敌人。

我真的被这个问题困住了,并寻求你的帮助。

这是一个简短的代码:

var enemyArray:Array = new Array();
var turretArray:Array = new Array();

addEventListener(Event.EnterFrame, loop);

// adding enemies
for(var i:int=0; i<3; i++){
    var enemy:Enemy = new Enemy();
    ...
    ...
    enemyArray.push(enemy);
    addChild(enemy);
}

// adding turret
for(var t:int=0; t<2; t++){
    var turret:Turret = new Turret();
    ...
    ...
    turret.destinationX = 0;
    turret.destinationY = 0;
    turret.distance = 0;
    turretArray.push(turret);
    addChild(turret);
}

// loop
function loop(event:Event):void{
    for(var j:int=enemyArray.length-1; j>=0; j--){
        for(var k:int=turretArray.length-1; k>=0; k--){

            // getting destination
            turretArray[k].destinationX = turretArray[k].x - enemyArray[j].x;
            turretArray[k].destinationY = turretArray[k].y - enemyArray[j].y;

            // getting distance between turret and enemy
            turretArray[k].distance =   Math.sqrt(turretArray[k].destinationX*turretArray[k].destinationX+turretArray[k].destinationY*turretArray[k].destinationY);

            // here i need to get min value from all turrets distance
        }
    }
}
4

2 回答 2

2

看起来你只需要跟踪你发现的最低值,而不是每次都覆盖它(如果我正确理解了你的代码)。

// loop
function loop(event:Event):void{
    for(var k:int=turretArray.length-1; k>=0; k--)
    {
        turretArray[k].distance = -1;

        for(var j:int=enemyArray.length-1; j>=0; j--)
        {
            var dx = turretArray[k].x - enemyArray[j].x;
            var dy = turretArray[k].y - enemyArray[j].y;
            var dist = Math.sqrt(dx * dx + dy * dy);

            if(dist < turretArray[k].distance || turretArray[k].distance < 0)
            {
                turretArray[k].distance = dist;
                turretArray[k].destinationX = dx;
                turretArray[k].destinationY = dy;
            }
        }
    }
}

在这里,我们存储在 中找到的初始距离值turretArray[k].distance,并且仅在找到较低的距离值时才覆盖它。我们将其设置为-1每次,以便我们可以判断它是否已设置。

于 2012-07-03T13:13:29.467 回答
0

这是你想要的等式:

http://www.mathopenref.com/coorddist.html

sqrt( (turret1X - turret2x)^2 + (turret1Y - turret2Y)^2 )

于 2012-07-03T13:15:37.837 回答