Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在AS3中实现OOP_Actionscript 3_Flash_Oop - Fatal编程技术网

Actionscript 3 在AS3中实现OOP

Actionscript 3 在AS3中实现OOP,actionscript-3,flash,oop,Actionscript 3,Flash,Oop,我不熟悉AS3和OOP概念。我有一门课叫AlienShips 我有一束激光,我正试图检查激光束与我舞台上所有的飞船的碰撞。但是碰撞会产生奇怪的结果。。它检测所有的飞船,而不仅仅是一艘特定的飞船。所以,当我的光束击中一艘alienships时,它也摧毁了所有其他的飞船 这是我的身份代码 public class AlienShip extends MovieClip { private var laserBeam:CannonBeam; public funct

我不熟悉AS3和OOP概念。我有一门课叫AlienShips

我有一束激光,我正试图检查激光束与我舞台上所有的飞船的碰撞。但是碰撞会产生奇怪的结果。。它检测所有的飞船,而不仅仅是一艘特定的飞船。所以,当我的光束击中一艘alienships时,它也摧毁了所有其他的飞船

这是我的身份代码

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);
        }

    }
这里是我的主文档类,在这里我实例化了所有的基类外来对象,如下所示

公共类掠夺者扩展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循环中碰撞到的特定飞船。我做错了什么?我如何更正外星人结构的设计?

出于测试目的,在您的主文档中,将ifaliens.hascolledCann更改为if异形.hitTestObjectcann。这解决了问题吗?您不知道需要AlienOne、AlienTwo和其他类。如果该类仅扩展Alien,那么它是无用的。alienShipArray.pushnew AlienShip;@Nambew-我想他计划稍后向它们添加更多函数。如果不是,那么你是对的,他应该使用基类。谢谢大家。所以我按照你的建议删除了所有Alien的基类。我查修改了我的代码并编辑了我的第一篇文章。现在我所有的alienships都只是一个类对象。但问题仍然是一样的。在我的for循环中,当光束与外星飞船碰撞时,只要光束与其中一艘飞船碰撞,所有飞船都会立即被摧毁。DestroySelf方法的内容是什么?