360方向射撃&精密移動

いつか言おうと思ってたAdvanced Directionオブジェクトを使った360度方向への移動処理です。
2〜3行で出来るのでぜひともおためしください( ^ω^)

実行ファイル(exe)
プロジェクトファイル(mfa) 要Advanced Directionオブジェクト





ふつうクリックシリーズではキャラクターは32方向にしか動けません。
弾も32方向にしか撃てないので、弾幕を張ろうとしても隙間が出来まくってスカスカです。
でもAdvanced Directionオブジェクトを使うとこんな風に逃げ場のねえようなレーザーを撃つことができます。
ちょっと勝手は違いますけど

焼き払え


Advanced Directionはその名のとおり平面上の距離や角度に関して強いエクステンションです。
多分中には三角関数とかがぎっしり詰まってるんでしょう。頼もしいなあ


進みたい方向と速度の数値をAdvanced Directionオブジェクトに渡すと(Get Movement)、
そのためには横に何ドット・縦に何ドット進めばいいかってのの数値が返ってきます。
例えば75度の方向に速度6と渡してみると、1.55291と -5.79556という数値が返ってきます。
こいつは便利です。あとはその数だけ動かせばいいんです。

イベントであらわすとこんな感じです

("bullet") のフラグ0がオフのとき、


→変数XにX( "bullet" )を設定;
→変数YにY( "bullet" )を設定;
→変数Aに6を設定;(速度)
→変数Bに75を設定;(角度)
→変数CにXMovement( "Advanced Direction Object",変数B( "bullet" ),変数A( "bullet" ))を設定;(移動量X)
→変数DにYMovement( "Advanced Direction Object",変数B( "bullet" ),変数A( "bullet" ))を設定;(移動量Y)
→フラグ0をオン;(動作開始)





("bullet") のフラグ0がオンのとき、

→変数Xに変数X+変数Cを設定;
→変数Yに変数Y+変数Dを設定;
→X( "bullet" )を変数Xに変更;
→Y( "bullet" )を変数Yに変更;

なげえ。でも2行

今回の肝は弾の座標を変数XとYで管理してるところです。
弾は常に変数Xと変数Yで示された位置にいることになります。
なぜこんなことをするのかというと、1ドット未満の微妙な移動を可能にするためです。
クリックシリーズ標準の座標管理だと整数しか使えないので、小数点以下の微妙な動きが表現できません。
MMF以降の変数では、小数点以下まできっちり管理できるので、
さっき出てきたような1.55291ドットずつ進むとかいった事も可能になるんです。

要するにそういう微妙な射撃が重要になる弾幕ゲーや狙い撃ちゲーなどが作れます。