我正在尝试在AS3中制作像塔防的游戏,并且目前无法找到解决方案来检查阵列中的哪个项目具有较低的敌人和炮塔之间的距离值,以便选择首先攻击哪个敌人。 / p>
我真的遇到了这个问题并请求你的帮助。
这是一个简短的代码:
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
}
}
}
答案 0 :(得分: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
,以便我们可以判断它是否已设置。
答案 1 :(得分:0)
这是你想要的等式:
http://www.mathopenref.com/coorddist.html
sqrt((turret1X - turret2x)^ 2 +(turret1Y - turret2Y)^ 2)