2

私はshmupを作成しようとしており、特定の「弾丸パターン」を作成しようとしています. 基本的に、敵に円の周りに多数の弾丸を発射させます。その弾丸の円が右に向かっているとしましょう。次に、円を崩壊させたいので、弾丸の x 速度と y 速度に 2 番目のインパルスを追加します。基本的に、発射される弾丸の形状が移動中に次のように見えるようにします (この見掛け倒しの記号化が理にかなっていることを願っています)。

O  o  •  o  O

それはうまくいきます。

次に、水平方向ではなく垂直方向の配置を折りたたむだけなので、次のようになります。

O  —  O 

これもできます。しかし、この円を斜めに、または完全に水平または垂直以外の方向に撮影しようとすると、少し壊れてしまいます。

ここに私が取り組んでいるコードがあります.clusterGrowthXとYのセクションは私が問題を抱えている部分です. 解決策はおそらく私を正面から見つめていますが、今はわかりません。ご不明な点がございましたら、お気軽にお問い合わせください。ありがとう。

            for(var j:int = 0; j < _info.clusterAmount; j++)
            {
                var around  : Number = _info.angle - (_info.clusterRange/2) + (_info.clusterRange/_info.clusterAmount/2) + j * (_info.clusterRange/_info.clusterAmount);
                var xOff    : Number = (Math.cos(around) * _info.clusterRadius);
                var yOff    : Number = (Math.sin(around) * _info.clusterRadius);

                var bullet = new _info.bulletShape(_info);
                bullet.x = startPoint.x + xOff;
                bullet.y = startPoint.y + yOff;
                if(_info.dParent is PlayerControl)
                {
                    bullet.x += Math.cos(_info.angle) * 40;
                    bullet.y += Math.sin(_info.angle) * 40;
                }
                var sign    : Number = (_info.angle < 0) ? -1 : 1;

                trace(Math.cos(around),Math.sin(around));

                bullet.info.vx += Math.cos(around) * _info.clusterGrowthX;
                bullet.info.vy += Math.sin(around) * _info.clusterGrowthY;

                bullet.rotation = _info.angle * 180 / Math.PI;
                _info.dLevel.addChild(bullet);
            }
4

2 に答える 2

1

あなたがする必要があるのは、任意の角度に沿って clusterGrowth を増減させることです。

では、任意の角度に沿って点を投影するにはどうすればよいでしょうか?

var amountOfOffset:Number = 10// how far along the angle you want to go.
var angleInDegrees:Number = 45; // this is the angle you want it to expand on.
var angleInRadians:Number = angleInDegrees * 0.0174532925;
clusterGrowthX = amountOfOffset * cos(angleInRadians);
clusterGrowthY = amountOfOffset * sin(angleInRadians);

それはあなたをする必要があります。

あなたが求めていることは、円上の点を見つけることとほとんど同じです: 半径と角度で点を見つける

于 2013-04-29T21:00:29.000 に答える