在AS3中找出OOP

时间:2014-06-06 15:19:10

标签: actionscript-3 flash oop

我是AS3和OOP概念的新手。我有一个名为AlienShips的课程

我有一个激光束,我正在试图检查梁与我舞台上所有人的碰撞。但碰撞给出了奇怪的结果..它可以检测到所有的实际情况,而不仅仅是一艘特定的船只。因此,当我的光束击中其中一个外星人时,它也会摧毁所有其他船只。

以下是我的AlienShip的代码

public class AlienShip extends MovieClip {

        private var laserBeam:CannonBeam;

        public function AlienShip(){
            trace("create new alien ship");
            addEventListener(Event.ADDED_TO_STAGE, enterFrameHandler );
        }

        private function enterFrameHandler(event : Event) : void {
            removeEventListener(Event.ADDED_TO_STAGE, enterFrameHandler);
        }

        public function destroySelf():void{
            parent.removeChild(this);
            removeEventListener(Event.ENTER_FRAME, enemyLoop);
        }

        public function hasCollided(otherObject:MovieClip):Boolean{
            return this.hitTestObject(otherObject);
        }

    }

这是我在舞台上的主要文档类,我将实例化所有基类外来对象,如下所示

公共类RaidersMain扩展了MovieClip {

private var alienOne:AlienShip;
private var alienTwo:AlienShip;
private var alienThree:AlienShip;
private var alienFour:AlienShip;
private var alienShipArray:Array = new Array();

public function RaidersMain(){
    initGameElements();
}

    public function initGameElements():void{

            alienOne = new AlienShip();
    stage.addChild(alienOne);
    alienTwo = new  AlienShip();
    stage.addChild(alienTwo);
    alienThree = new  AlienShip();
    stage.addChild(alienThree);
    alienFour = new  AlienShip();
    stage.addChild(alienFour);
    alienShipArray.push(alienOne);
    alienShipArray.push(alienTwo);
    alienShipArray.push(alienThree);
    alienShipArray.push(alienFour);

        cann = new CannonBeam();
        stage.addChild(cann);

        stage.addEventListener(Event.ENTER_FRAME, loop);
  }

  private function loop(event : Event) : void {
      checkForBeamAlienCollision();
  }

  private function checkForBeamAlienCollision() : void {
        for(var i = 0; i < alienShipArray.length; i++){
            var currentShip:AlienShip = alienShipArray[i];

            if(currentShip.hasCollided(cann)){
                currentShip.destroySelf();
                alienShipArray.splice(i,1);
            }
        }
   }

但是在for循环中它会摧毁所有外星人,而不仅仅是射束在for循环中碰撞的特定船只。我究竟做错了什么?如何纠正外星人结构的设计?

0 个答案:

没有答案