我是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循环中碰撞的特定船只。我究竟做错了什么?如何纠正外星人结构的设计?