やっぱり逃げてばかりではいけない。そう思って、今日はお勉強をしていました。 いつか必要になる、でも作らなくても何とかなるかと思って避けていた…それは「長方形の当たり判定」。

丸&丸…というか実際には正方形と正方形なんだが、それの当たり判定はウルトラのラクです。 自機と敵の弾の中心座標を比べるだけでいいのです。テラメリテールDEMOでは ナプスタブルークやトリエルさんが攻撃の弾を放ってきますが、 どちらも細長い形をしていることはなく、いうなれば「円形」に近いものなので正方形の当たり判定で作っていました。

だが、例えばサンズやパピルスの骨の攻撃なんてのは細長い。アンダインの槍も細長い。 アンダインの槍はスピードもあるから中央にだけ当たり判定があっても同じかなという気はするが、 ワンボーの剣も細長い。細長い形状の弾は多いのだ…。

さらに夢なんだが、それを傾けてみたい。長い棒状の攻撃判定を傾けて、 それに当たらないようにする、みたいなのも作ってみたい。遊びの幅が広がります。 遊びの幅というか攻撃されるバリエーションの幅です。

さて、それってどうやるんだろう?ウディタにはそもそも当たり判定に関する機能みたいなのはない。 座標X,Yの位置にあるピクチャの色だけでも取得できたらすーぐできるんだけどね… ないものはない、仕方ない。無料でウディタを使わせてもらっているんだ、嘆いてはならない。

えーと、ここは検索してみるか。「傾いた矩形同士の当たり判定」で検索。お、発見。

例えば60度傾いた矩形に対して座標50,50の位置にいる自機(点)が 衝突しているかを求めるには、矩形が傾いていなかったときに対する 自機の座標を求められれば傾いていない矩形と自機の当たり判定を求めるだけでOK。

は〜…なるほど…頭良すぎる…。そんなの一生かかっても思いつかねえ…。

「傾いていなかったときに対する自機の座標」を求めるには「傾いている角度」の 数値を使うため、何度傾いていようと同じ計算でいいのである。すげー!

…で、解説されているのを読んでその通りにウディタに入力すればいいや、と思った。 が、よく見ると途中で「√」がある。へ、平方根! これは…ウディタに標準搭載されてない…!!うーん…ひとまずほかのやり方を探そう。

どんだけ平方根嫌いなんだお前。いや別に取り立てて平方根が嫌いというわけじゃない。 数学が嫌いなのである。偉そうに言うことではない。

他には…ベクトルを使う方法もあるようだ。四角形の4つの頂点の座標を元に ベクトルを求め、自機の座標と比べ、全て正か全て負ならば当たっている。おお、 √とか出てこないしウディタの機能だけでできそう(もちろん√もウディタの計算でできる)。

…だがこの方法は自機に面積があるときにパっと見どうしていいか分からなかった (多角形と点の当たり判定だった)のでとりあえず保留。

面積がある系の当たり判定では、弾と自機が傾いて接近し、 当たっているときは必ず自機の頂点の少なくとも一つが弾の四角形の中にある という方法も発見!なるほど!マジでみんな頭いいな!!

でもそれは「正方形同士」のものであり、傾いていてもいいというのは DEMO版でも作った処理よりも一歩進んでいるんだけど細長いものには適用できない。 今はどちらかというと、回転よりも細長くあることの方が大事かも…!

ワンボーの剣は傾いてないし、細長い弾は傾くことはないとしてもいいかなと 思ったんだが、スタッフロールの避けゲーで歯車のように名前が迫ってくるところでは どう見ても細長いものが傾いているのでチャレンジすべきだよなあ…!!

そして最後に、四角形二つが重なっているときは「お互いの辺が交差している」 というタイプの当たり判定も発見。なるほど!!お前自分では何も思いつかないのな。

弾がデカいときは弾の中で無敵時間が終わり、でも弾がデカくて 自機をすっぽり覆うぐらいだったら弾の中にいて辺に当たらないように動くと ダメージを受けない、ということがあるのかもしれないが…とにかくこれなら何とかなるかも。

え〜…線分ABと線分CDが交差しているかの判定は……ぐー。 …というのが現在の進捗。何も進んでねーじゃねーかと思いそうになりますが、 当たり判定に関する一歩踏み込んだ考え方を学び、実現可能そうな 手段を見つけたというところは進展といえるんじゃないだろうか…!?

一歩踏み込んだところで難しそうで後ずさりしたわけだが…。 目標は、「くるくるくるりん」のヘリリンみたいな動きをする弾を すーっと避けなければいけない、みたいなのを作ることです。ぼくにできるかなあ?ノープロブレム。だったらいーんだけどねえ…。
2021年6月7日


◆目次に戻る◆






inserted by FC2 system