我的目标是每次点击船只时射击子弹。事实上,如果我点击它一次,子弹就会被击中,但是如果我在第一颗子弹离开屏幕之前点击它两次,那么第一颗子弹就会停止(它不会消失,只会停止)第二颗子弹被击中了。
public var ship:Ship = new Ship();
public var bullet:Bullet = new Bullet();
stage.addChild(ship);
ship.addEventListener(MouseEvent.CLICK, shoot);
function shoot(e:MouseEvent):void
{
stage.addEventListener(Event.ENTER_FRAME, bulletflies);
}
function bulletflies(e:Event):void
{
stage.addChild(bullet);
bullet.y -= 5;
}
答案 0 :(得分:2)
将子弹设置为自己的类,让该类自行迭代运动:
public class Bullet extends Sprite {
public function Bullet(ship:Ship) {
// this assumes that you've also set "Ship" up as it's own class
this.x = ship.x;
this.y = ship.y;
this.addEventListener(Event.ENTER_FRAME, this.enterFrameHandler);
}
private function enterFrameHandler(event:Event):void {
this.y -= 1;
// destroy this clip when it's outside of the stage - better mem managament
if(this.y < 0 || this.y > this.stage.stageHeight) {
this.removeEventListener(Event.ENTER_FRAME, this.enterFrameHandler);
this.parent.removeChild(this);
}
}
}
在您的Ship类中,将拍摄功能更改为:
function shoot(e:MouseEvent):void {
this.addChild(new Bullet(this));
}
将Ship作为一个类并将Bullet作为另一个类是很好的。这样每个对象都会照顾它的自我。此外,如果您最终拥有EnemyBullet
,那么您可以开始使用继承和多态(我敢打赌,在您学习它们之后,您会喜欢这些)。
答案 1 :(得分:0)
这是因为你只有一颗子弹。
您可以创建项目符号数组,因此请更改
public var bullet:Bullet = new Bullet();
到
public var bullets:Array = [];
然后,
ship.addEventListener(MouseEvent.CLICK, shoot);
function shoot(e:MouseEvent):void
{
var b:Bullet=new Bullet();
b.addEventListener(Event.ENTER_FRAME, bulletflies);
stage.addChild(b);
bullets.push(b);
}
function bulletflies(e:Event):void
{
e.currentTarget.y -= 5;
if(e.currentTarget.y < 0 || e.currentTarget.y > stage.height) {
stage.removeChild(e.currentTarget);
bullets.splice(bullets.indexOf(e.currentTarget), 1);
}
}
- 编辑 -
回应你的评论
我不喜欢每个子弹拥有它自己的ENTER_FRAME
的想法
在stage.addEventListener(Event.ENTER_FRAME, bulletflies);
ship.addEventListener(MouseEvent.CLICK, shoot);
删除b.addEventListener(Event.ENTER_FRAME, bulletflies);
并将事件处理程序更改为:
function bulletflies(e:Event):void
{
for each(var b:Bullet in bullets) {
b.y -= 5;
if(b.y < 0 || b.y > stage.height) {
stage.removeChild(b);
//bullets.splice(bullets.indexOf(b), 1);
}
}
}