Flash AS2-分组敌人



因此,我有一个Flash Actionscript 2代码,该代码创建了预设数量的敌人,给出了敌人的统计数据,并使它们随机移动。代码:

//Settings
var mapWidth:Number = 550;
var mapHeight:Number = 400;
var enemiesArray:Array = new Array();
var totalEnemies:Number;
var eClip:MovieClip;
//Math functions
function getdistance(x, y, x1, y1)
{
    run = x1-x;
    rise = y1-y;
    return (hyp(run, rise));
}
function hyp(a, b)
{
    return (Math.sqrt(a*a+b*b));
}
function resetDirection(mc:MovieClip)
{
    mc.roamTime = random(50);
    mc.t = mc.roamTime;
    mc.roamDistance = random(60)+25;
    mc.randomRoamDistanceX = (Math.random()*mc.roamDistance)+mc.xx-(mc.roamDistance/2);
    mc.randomRoamDistanceY = (Math.random()*mc.roamDistance)+mc.yy-(mc.roamDistance/2);
    mc.newRoamDistance = getdistance(mc._x, mc._y, mc.randomRoamDistanceX, mc.randomRoamDistanceY);
    mc.norm = mc.roamSpeed/mc.newRoamDistance;
    mc.finalRoamDistanceX = (mc.randomRoamDistanceX-mc.xx)*mc.norm;
    mc.finalRoamDistanceY = (mc.randomRoamDistanceY-mc.yy)*mc.norm;
}
//function to move enemies
function moveIt(mc:MovieClip)
{
    //reduce roamTime;
    mc.t--;
    //move enemy to new position
    if (getdistance(mc._x, mc._y, mc.randomRoamDistanceX, mc.randomRoamDistanceY)>mc.roamSpeed) {
        mc._x += mc.finalRoamDistanceX;
        mc._y += mc.finalRoamDistanceY;
    }
    //rotate enemy                
    XXXdiff = mc.xx-mc.randomRoamDistanceX;
    YYYdiff = -(mc.yy-mc.randomRoamDistanceY);
    rrradAngle = Math.atan(YYYdiff/XXXdiff);
    if (XXXdiff<0) {
        cccorrFactor = 270;
    } else {
        cccorrFactor = 90;
    }
    //
    mc.ship_mc._rotation = -(rrradAngle*360/(2*Math.PI)+cccorrFactor);
    //check if time to reset, based on roamTime   
    if (mc.t<=0) {
        resetDirection(mc);
    }
}
//
// Generate Enemies
//
// set and save enemy stats
//
// 
// createEnemies(number of enemies you want, movieclip where you want to create the enemies);
//
function createEnemies(amount:Number, targetLocation:MovieClip) {
    trace("createEnemies: "+amount);
    for (var i = 0; i<amount; i++) {
        randomXpos = Math.round(Math.random()*mapWidth);
        randomYpos = Math.round(Math.random()*mapHeight);
        //add new enemy to map
        var newEnemy:MovieClip = targetLocation.attachMovie("enemy1", "enemy1_"+i, targetLocation.getNextHighestDepth());
        enemiesArray.push(newEnemy);
        //
        //set enemy stats
        newEnemy.id = i;
        newEnemy._x = randomXpos;
        newEnemy._y = randomYpos;
        //save x and y position
        newEnemy.xx = newEnemy._x;
        newEnemy.yy = newEnemy._y;
        //
        newEnemy.roamSpeed = 2
        newEnemy.roamTime = random(50);
        newEnemy.roamDistance = random(60)+25;
        newEnemy.t = 0;
        //
        newEnemy.myHealth = 10;
        newEnemy.myName = "Small Scout";
        //
        resetDirection(newEnemy);
        //target enemy
        newEnemy.onPress = function() {
            trace("Enemy: "+this.tName+" "+this.id);
            target_txt.text = this.myName+": "+this.id+" Health: "+this.myHealth;
        };
        newEnemy.onEnterFrame = function() {
            moveIt(this);
        };
    }
}

start_btn.onRelease = function() {
    if (start_txt.text == "Start") {
        //run the create enemies function to start the engine
        createEnemies(box_mc.numberOfEnemies.text, map_mc);
        //hide start button
        start_txt._visible =false;
        this._visible = false;
        box_mc._visible = false;
    }
};

我希望将程序敌人分组(基于萤火虫算法)。我的想法是为循环写作以定义吸引力,但我不知道如何使我的物体转向最吸引人。也许有人会帮助我解决这个问题?

我更改此行:

newEnemy.myHealth = 10;

在此

newEnemy.myHealth = Math.round(random(9)+1);

MyHealth将对吸引力负责。我尝试使用此站点中的代码并修改代码,以使吸引力较低的对象遵循具有较大吸引力的对象。另外,我想在组中停止算法。

最新更新