一次可以在屏幕上显示多个子弹?

时间:2012-06-19 02:51:19

标签: actionscript-3 actionscript

基本上发生的事情是当我射击子弹时,它会制造子弹。但是,如果我再次点击子弹仍然在屏幕上,它会移除子弹并制作一个全新的子弹。所以现在屏幕上一次只能有一颗子弹。我该如何解决? 库中的项目符号的实例名称为“bullet”

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

1 个答案:

答案 0 :(得分: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