Master.typeX 2023/08/27 17:54

GM:怪奇!collision_rectangleの謎!

どうも、Master.typeXです。
今回は進捗と同時に備忘録的なログにしようと思う。
というのも事の始まりはサキュバス・リリィの動作を
作っていた時だ。まずは動画を見ていただきたい。

効果音は付いてないがまあ、だいたい完成したところだ。
で、問題となったのが最初のリングレーザーだ。
今回、当たり判定にcollision_rectangleというものを使ったのだが
コレがいけなかった。

まず、collision_rectangleとはなんぞやと言われると
rectangleの名前の通り、指定した矩形の範囲内に
指定した対象オブジェクトが引っかかると
当たったかどうか、他にも対象オブジェクトの
変数などの情報なんかも取得できるというものだ。

一見すると便利そうだな?と思うだろう?
実は罠が潜んでいた。という事でこちらの図を見ていただきたい。

例として緑色の矩形が前述のcollision_rectangleで
赤い矢印の付いたのが攻撃範囲と思っていい。
上下に二個別れているが、枠を見ての通り
上下で一枚のスプライトである。
で、スプライトのCollisionMask設定は
「フレーム毎に正確」を選択している状態だ。
こうすることで赤の矢印部分だけが当たり判定になる。

言っておくと、矢印側の枠はあくまでも
見やすくするために用意したものなので
無いものと考えてくれ。

画像サイズ的にスレスレではあるが
まあでも当たらないだろうと思った。
しかしだ、現実は③の通り
命中してダメージイベントが発生する。

つまり、collision_rectangleは
対象オブジェクトのスプライト全体を参照する

ということがわかったのだ。困ったものだ。

対処法だがぶっちゃけた話
同じような大きさの矩形のスプライトを
用意して、collision_rectangleではなく
instance_placeで処理すればいい。
まあ、これはあくまでも自分の例ではあるがな。

ただ、同じような大きさのスプライトを
複数用意するのは手間だ。
しゃがみ状態はともかくとして
ほふくや変身で当たり判定が小さくなるので
そこまで面倒見なきゃならない。
ちなみに、mask_indexはアテにならないので
素直にsprite_indexで当たり判定を変えてやろう。

結論。
素直に当たり判定のスプライト描きましょう。
ということだ。

じゃあcollision_rectangleはどこで使うんだと言われると
俺も返答が困るので勘弁な!

それでは今回はこの辺で!
また次回!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索