2012-06-19 54 views
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); 
     } 
    } 
} 
} 

回答

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