2012-06-19 5 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

로 이동하는 것입니다 :

이 경우 당신은 여전히 ​​더 같이해야한다,이 방법을 사용하려면

관련 문제