1

基本上发生的事情是当我发射子弹时,它会产生子弹。但是,如果我在项目符号仍在屏幕上时再次单击,它会删除项目符号并创建一个全新的项目符号。所以现在一次只能在屏幕上显示一颗子弹。我该如何解决?库中的项目符号的实例名称为“项目符号”

package
{



public class GameEnter extends MovieClip
{

    public function GameEnter()
    {
        addEventListener(MouseEvent.MOUSE_DOWN, shootBullet);
    }
    public var _bullet1:bullet = new bullet;
    public var angleRadian = Math.atan2(mouseY - 300,mouseX - 300);
    public var angleDegree = angleRadian * 180 / Math.PI;
    public var speed1:int = 10;

    public function shootBullet(evt:MouseEvent)
    {
        _bullet1.x = 300;
        _bullet1.y = 300;
        _bullet1.angleRadian = Math.atan2(mouseY - 300,mouseX -300);
        _bullet1.addEventListener(Event.ENTER_FRAME, bulletEnterFrame);
        addChild(_bullet1);
    }
    public function bulletEnterFrame(evt:Event) 
    {
        var _bullet1 = evt.currentTarget;
        _bullet1.x += Math.cos(_bullet1.angleRadian) * speed1;
        _bullet1.y += Math.sin(_bullet1.angleRadian) * speed1;
        _bullet1.rotation = _bullet1.angleRadian*180/Math.PI;
        if (_bullet1.x < 0 || _bullet1.x > 600 || _bullet1.y < 0 || _bullet1.y > 600) 
        {
            removeChild(_bullet1);
            _bullet1.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
        }
    }
}
}
4

1 回答 1

2

想想看,你将 _bullet1 变量存储在类中,这很好,但每次拍摄时都使用相同的变量,只是再次更改 x 和 y 位置。

更好的方法是在子弹类本身中处理子弹的动画。

射击时,您只需创建一个新子弹并将其添加到舞台上。

如果你仍然想使用这种方式,它应该更像这样:

public function shootBullet(evt:MouseEvent)
{
    var bullet:bullet = new bullet();
    bullet.x = 300;
    bullet.y = 300;
    bullet.angleRadian = Math.atan2(mouseY - 300,mouseX -300);
    bullet.addEventListener(Event.ENTER_FRAME, bulletEnterFrame);
    addChild(bullet);
}

public function bulletEnterFrame(evt:Event) 
{
    var tmpBullet:bullet = evt.currentTarget as bullet;
    tmpBullet.x += Math.cos(_bullet1.angleRadian) * speed1;
    tmpBullet.y += Math.sin(_bullet1.angleRadian) * speed1;
    tmpBullet.rotation = _bullet1.angleRadian*180/Math.PI;
    if (tmpBullet.x < 0 || tmpBullet.x > 600 || tmpBullet.y < 0 || tmpBullet.y > 600) 
    {
        removeChild(tmpBullet);
        tmpBullet.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
    }
}

但最好的方法是选择选项 1

于 2012-06-19T02:55:36.983 回答