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( (タレット1X - タレット2x)^2 + (タレット1Y - タレット2Y)^2 )

于 2012-07-03T13:15:37.837 に答える