0
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 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 var speed1:int = 10;
    public function bulletEnterFrame(evt:Event) 
    {
        _bullet1.x += Math.cos(_bullet1.angleRadian) * speed1;
        _bullet1.y += Math.sin(_bullet1.angleRadian) * speed1;
        _bullet1.rotation = _bullet1.angleRadian*180/Math.PI;
        checkHit();
        if (_bullet1.x < 0 || _bullet1.x > 600 || _bullet1.y < 0 || _bullet1.y > 600) 
        {
            removeChild(_bullet1);
            _bullet1.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
        }
    }



public function checkHit()
{
     if(_bullet.hitTestObject(enemy))
     {
          trace("Enemy hit");
     }
}

}

本質的に何が起こるかは、「敵のヒット」を約10回出力することです。私は疑問に思っています:「敵のヒット」を1回だけトレースするにはどうすればよいですか? 問題は、弾丸が敵にあるすべてのフレームで、それが印刷されることだと思います.1回だけ印刷するようにするにはどうすればよいですか?

最終的には「trace("Enemy hit");」を置き換えます。関数か何かで。

4

1 に答える 1

0

checkHit() はすべてのフレームで呼び出され、弾丸はゲーム領域の外にあるときにのみ削除されますか? これは、checkHit() が true であるフレームごとに「敵の命中」が追跡されることを意味します。ヒットが発生したら、弾丸が画面外に移動したときと同様に、イベント リスナーを削除する必要があります。

于 2012-06-10T23:13:12.327 に答える