Actionscript 3 在AS3中实现OOP
我不熟悉AS3和OOP概念。我有一门课叫AlienShips 我有一束激光,我正试图检查激光束与我舞台上所有的飞船的碰撞。但是碰撞会产生奇怪的结果。。它检测所有的飞船,而不仅仅是一艘特定的飞船。所以,当我的光束击中一艘alienships时,它也摧毁了所有其他的飞船 这是我的身份代码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
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方法的内容是什么?