0

この種の効果が欲しい:

http://i.imgur.com/xGi46.png

つまり、クリックするたびに、弾丸を使用して爆弾タイプの効果が得られます。これが私のこれまでのコードです。現在、マウスの方向にのみ弾丸を作成します。コードが乱雑な場合は申し訳ありません。

shotDex = new Timer(timerDelay2);
shotDex.addEventListener(TimerEvent.TIMER, shot);

stage.addEventListener(MouseEvent.MOUSE_DOWN, shootBullet);
stage.addEventListener(MouseEvent.MOUSE_UP, dontShoot);

    public var angleRadian = Math.atan2(mouseY + 42.75,mouseX + 331.7);
    public var angleDegree = angleRadian * 180 / Math.PI;
    public var speed1:int = 10;

    public var shotDex:Timer;
    public var timerDelay2:int = (250);
    public function shot(tEvt:TimerEvent)
    {
        var _bullet2:bullet2 = new bullet2;
        _bullet2.x = 300;
        _bullet2.y = 300;
        _bullet2.angleRadian = Math.atan2(mouseY + 42.75,mouseX + 331.7);
        _bullet2.addEventListener(Event.ENTER_FRAME, bulletEnterFrame);
        stage.addChild(_bullet2);
    }
    public function shootBullet(evt:MouseEvent)
    {
        var _bullet2:bullet2 = new bullet2;
        _bullet2.x = 300;
        _bullet2.y = 300;
        _bullet2.angleRadian = Math.atan2(mouseY + 42.75,mouseX + 331.7);
        stage.addChild(_bullet2);
        _bullet2.addEventListener(Event.ENTER_FRAME, bulletEnterFrame);
        shotDex.start();
    }
    public function bulletEnterFrame(evt:Event)
    {
        var _bullet2 = evt.currentTarget;
        _bullet2.x +=  Math.cos(_bullet2.angleRadian) * speed1;
        _bullet2.y +=  Math.sin(_bullet2.angleRadian) * speed1;
        _bullet2.rotation = _bullet2.angleRadian * 180 / Math.PI;
        if (_bullet2.x < 0 || _bullet2.x > 600 || _bullet2.y < 0 || _bullet2.y > 600)
        {
            stage.removeChild(_bullet2);
            _bullet2.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
        }
    }
    public function dontShoot(evt:MouseEvent)
    {
        shotDex.stop();
    }
4

1 に答える 1

2

弾丸ごとに異なる角度を指定する必要があります。値は0ラジアンと2 * Math.PIラジアンの間に等間隔で配置されます。

public function shootBulletCircle(evt:MouseEvent) {
    var shots:Number = 12; // Number of shots in the circle
    for (var i=0; i<shots; i++) {
        var _bullet2:bullet2 = new bullet2;
        _bullet2.x = 300;
        _bullet2.y = 300;
        _bullet2.angleRadian = (i/shots)*(2*Math.PI);
        stage.addChild(_bullet2);
        _bullet2.addEventListener(Event.ENTER_FRAME, bulletEnterFrame);
    }
}

オプションの補足として:(DisplayObjectおそらくあなたBulletののスーパークラスです)には、rotation描画時に自動的に使用されるプロパティがありますが、度単位の値が必要です。angleRadian度を計算し、それを弾丸の回転値として保存して、完全に取り除くことができます。

于 2012-06-25T20:16:06.137 に答える