2012年 03月 29日 ( 4 )


2012年 03月 29日

【MUGEN】敵座標参照弾_おまけ【制作技術】

敵座標を参照するのではなく固定角で撃ち出す弾を作る時の話。

d0050070_15491095.jpg


例えばはどうけんを斜めに撃ちたい、とか、固定角度の扇弾幕を作りたい、とかであれば
角度も弾速もすでに判っていると思います。
速度10の弾を30度方向に撃ちたい!という感じですね。

しかしながらMUGEN上では私たちの使用するものとは角度の単位が違うため、
直接代入するととんでもない方向に飛んでしまうはめになります。

希望する角度をMUGEN上の単位に変換するには次の計算式を用います。
変換後の弾角r = 希望角度d * 円周率pi / 180
例の30度方向であれば、
30 * 3.141592... / 180
となり、答えは0.523(くらい)が求められます。


さてさて、Y=0、つまりまっ直線に弾速sで進む弾を
新たに角度rで撃ち出す場合の弾速X、Yの求め方は、

X= s cos r
Y= s sin r

前回の奴の後半と全く同じです。

「1fあたりのY方向への移動量が0の時、1fあたりX方向に100進む弾」は、
どれだけ角度が変わっても発射点から移動後の座標までを結んだ直線の長さが常に100です。
d0050070_16233824.jpg
座標参照弾_上より。すべての角度を繋ぐと円になります。

#以下じゃなくて未満だけどね


どの方向にも一定であるため、斜線Sの長さも同じ値が入るということになります。
あとはcosとsinを使って、任意の角度を持つ斜線SのXとYを求めればおk、と。

一辺の長さ(この場合弾速)と角度が判っていれば、残りの辺の長さは求められます。

どうしても計算式じゃなくて固定の値を入れたい場合はこれを個別に計算して入力してあげましょう。
[PR]

by goukasoshina | 2012-03-29 19:13 | 最速のmugen
2012年 03月 29日

【MUGEN】敵座標参照弾_下【制作技術】

つづき。何の事か判らない方は前の記事を先にご覧ください。

前回は「敵座標指定弾では、弾の移動速度X,Yは自座標から敵座標への角度によって変動」
することについて解説しました。


d0050070_16233824.jpg
以下じゃなくて未満だけどね。

QKさんに頂いた画像と前回の解説画像をもとに、新たに書き起こしたのがこちら。
d0050070_1438411.jpg
弾速sは任意の速度です。お好きな速度を入れて下さい。


今回は実際にこれを求める方法を模索していきたいと思います。

三角関数と逆三角関数
を使います。

はい。げろが出そうですね。この単語でイラっとする人は非常に多いかと思われます。
この三角関数および逆三角関数ですが、実はこういったことを求めるのに非常に適しています。
MUGEN上でもそのまま使用できますので、いちいち計算する必要なく、
適当な公式を置いておくだけで単純な敵座標指定弾は完成してしまいます。

何を使えばいいのか理解さえ出来ればあとは勝手に計算機(MUGEN)がやってくれる。
非常に良い時代になりましたね。
じゃ、何を使うのか見ていきましょう。



まず角度が判らなくては話にならないので、これを求めたいところですね。
そのためには自分の座標と相手の座標、そしてその差がどのくらいあるかが必要不可欠です。

基本的にMUGEN上での自座標は0,0ですね。ローカル座標などといわれるものです。
そしてMUGENには相手座標までの距離を直接取得出来る命令が標準で搭載されています。
自座標から相対で値を出してくれますので、これらを用いることで
相手の座標、および自座標との差
が得られます。
なんといちいち計算しなくていいんです。すごく便利ですね!ここに書くことなんかないよ!



んで、自分の座標と相手の座標の差が判ったので、弾の角度rを求めることが出来ますね。
実際の求め方ですが・・・逆三角関数を使いましょう。

図をちら見してください。現在判っている情報は自座標(0,0)、任意の弾速s、敵座標(までの距離)x,yです。
逆三角関数には、自座標x,yと敵座標x,yが判っていれば
ダイレクトにその角度を求めだすとってもお買い得な計算式があります。

それがatan2(敵x,敵y)です。
atan2もMUGEN上で普通に使えるので、(1)で調べた「敵座標を取得」する命令を代入してやれば
ここはそれだけで完成です。仕組みが知りたい方は本屋さんで数学の参考書を探しましょう。

追記:大ウソでした。

確認したところ、MUGENにatan2は実装されておりません

ここは実装されているatanを使って、以下の手法を取りましょう。
atan(敵y / 敵x)
atanの性質上、正面方向(真正面を0度として、-90度~+90度)の範囲に限られますが、
これにより角度を算出可能です。

補足になりますが、(2)で使用したatanでは正面方向のみの算出なので
角度の計算時に相手が後ろ、負の方向に行ってしまった場合は計算できません。
この処理にはMUGEN上で相手が後ろに回ったら(発射元となるキャラやヘルパーを)振り向かせる、
あるいはifelseを使い、相手の位置にあわせて弾速Xに-1をかけるなどの工夫が必要となります。



そして角度が求められたら、その角度と自分が指定する任意の弾速sから、
補正後の弾の速度X、Yを求めることが出来るようになります。
ここでもXとYでそれぞれ一回ずつ三角関数を使えば、直接求めることが出来ます。仕組みはry

弾速Xを求めるには、弾速s * Cos角度r
弾速Yを求めるには、弾速s * Sin角度r

です。MUGEN上でこのまま使えるのでry

ここまでの情報をまとめると下記図が出来あがります。
d0050070_15491095.jpg
だいぶ高校数学の教科書っぽい図になりました。


さてさてこの後は何をしたらいいんでしょうか。
欲しかったのは弾速X、Yで、計算式は判りました。
計算はMUGENが勝手にやってくれます。

・・・おや。完成ですね。

ほらね?簡単だったでしょう?

まとめ
d0050070_15493378.jpg



おつかれさまでした∩(・ω・)∩ばんじゃーい
[PR]

by goukasoshina | 2012-03-29 16:07 | 最速のmugen
2012年 03月 29日

【MUGEN】敵座標参照弾_上【制作技術】

QKさんと飛び道具についてアレコレしたときに作ったものをおすそ分けします。


お題:敵座標参照弾について。

シューティングゲームなどでよく見ますが、
ホーミングではなく、弾が発生した時点での自機座標に向かってまっすぐ飛んでくる弾、よくありますよね。
いわゆる自機狙い弾です。


今回はこの自座標x、yから、敵座標x、yに向かって弾速sで飛ぶ弾を作るうえで必要なものは何かを明確にしていきます。


#表題になってますが、MUGENは基本的に格ゲーなので、ここでは便宜上「敵座標参照弾」とします。
#性質上、数学の話になりますが、MUGEN上で作る際に必要な情報に絞っていますので頑張ってくださいねほしみ。


まずこちら、QKさんから頂戴した画像です。
d0050070_16101259.jpg

左上の鋭角を持つ点が自座標(発射点)、角cが敵(目標座標)との角度差、
右下が取得した敵座標に対し1フレーム経過時の弾の到達点。
そして辺AとBはそれぞれ、1f経過時の弾のX、Y方向への移動量を表しています。
斜辺は弾を飛ばしたい直接の方向です。


さて、MUGEN上(に限りませんが)では単純な速度と角度を指定できないため、
弾の移動速度にX、およびYの2種の移動量を指定することで目的の方向に飛ばさなければいけません。

では、例えば敵座標が1,1であるとき、速度1で1フレーム飛んだ弾の実際のX座標、Y座標はいくつでしょうか。

X=1、Y=1?

図にしてみましょう。
d0050070_16233824.jpg

発射位置から速度1の距離に円を描くと、このようになります。以下じゃなくて未満だけどね。
先ほどの例だと、1fの間、X=1,Y=1で弾を飛ばした際の座標は
実際の位置を大きく飛び越えてしまっています。
真横や真上に飛ぶよりずっと早く飛んでることになってしまいますね。


これが斜めに移動する物体を作る時に最も重要なポイントです。


まとめ
敵座標指定弾では、弾の移動速度X,Yは自座標から敵座標への角度によって変動します。


つづきます。
[PR]

by goukasoshina | 2012-03-29 15:16 | 最速のmugen
2012年 03月 29日

うちの人がね・・・

私はまだHRすらカンストしてないド底辺プレイヤーなんですが、
一緒に始めたうちの人(当時MH暦0時間、アクション下手、ファンゴに3乙)が


d0050070_14161375.jpg

フル秘伝

しかも

d0050070_14143873.jpg


SRカンスト


ついていけないですだわよ(´・∀・`)
[PR]

by goukasoshina | 2012-03-29 14:19 | 最速のゲーム事情