对象遵循同一个类

时间:2014-06-12 13:54:54

标签: arrays actionscript-3 hittest

我有一个问题,我正在开展一个更大的项目,我做了一个小项目来测试这个问题。

问题在于: 我制作了一个产生敌人的按钮。当敌人击中盟友时,它会以相反的方向反弹。但问题是,当一个敌人击中测试对象时,每个敌人的实例都会反弹。

我的代码:

我的主要课程:

package  {

import flash.display.*;
import flash.ui.*;
import flash.events.*;

public class MainClass extends MovieClip {
    public var speed:int = 3;
    public static var enemyArray:Array = [];
    public var randNumber:Number = 0;
    public static var allyCopy1 = new allyCopy();
    public function MainClass() {
        stage.addEventListener(Event.ENTER_FRAME, update);
        spawnButton1.addEventListener(MouseEvent.CLICK, spawnEnemy);
        allyCopy1.addEventListener(MouseEvent.MOUSE_DOWN, dragOn, true);
        allyCopy1.addEventListener(MouseEvent.MOUSE_UP, dragOff, true);
        addChild(allyCopy1);
            allyCopy1.x = 60,25;
            allyCopy1.y = 208,05;

    }
    public function update(e:Event)
    {
        /*for (var i:Number = 0; i < enemyArray.length; i++)
        {
            enemyArray[i].x -= speed;
        }*/
    }
    public function dragOn (e:MouseEvent)
    {
        allyCopy1.startDrag();
        trace("drag");
    }
    public function dragOff (e:MouseEvent)
    {
        allyCopy1.stopDrag();
    }
    public function spawnEnemy(e:MouseEvent)
    {
        randNumber = Math.random();
        trace(randNumber);
        var enemy1 = new enemy ();
        addChild(enemy1);
        enemyArray.push(enemy1);
        if (randNumber <= .5)
        {
            enemy1.x = 526.25;
            enemy1.y =  68.05;
        } else
        {
            enemy1.x = 526.25;
            enemy1.y = 200.05;
        }
    }
}

}

敌人阶级:

package  {

import flash.display.*;
import flash.events.*;


public class enemy extends MovieClip {
    public static var hp:int = 100;
    public static var speed = 3;

    public function enemy() {
        addEventListener(MouseEvent.CLICK, killEnemy);
        addEventListener(Event.ENTER_FRAME, update);



    }
    public function update (e:Event) {
        x -= speed;
        if ( x <= 0)
        {

            MainClass.enemyArray.pop();
            trace(MainClass.enemyArray);

        }
        if(MainClass.allyCopy1.hitTestObject(this))
           {
               speed = -3;
           }
    }
    public function killEnemy (e:MouseEvent)
    {
        this.parent.removeChild(this);
        trace(MainClass.enemyArray);
        MainClass.enemyArray.pop();
    }
}

}

1 个答案:

答案 0 :(得分:0)

问题是speed静态变量。这意味着它并不是每个敌人都是分开的,但对于所有实例来说都是常见的(共享)。所以如果你改变它,它会随处变化..

不要经常做变量静态 - 这是非常糟糕的做法。生命中也会发生同样的事情 - 如果你减少一个敌人的生命,它将减少所有敌人的生命(该类的所有实例)。

相关问题