ロゴ ロゴ

アクションゲームに使う”押し出し”が出来ました

はじめに

 一か月二か月三か月、そして今回、四か月のブログ投稿のブランクとどんどんと投稿頻度が落ちているUmiです。

今回は前々々回(10月に投稿したもの)ブログにした衝突判定に関連して“押し出し(自称で正式名称分かんない)”というものについてとそれに加えてアクションゲームの経過報告を書きたいと思います。それと、今回のブログは短めにして一、二週間後にゲームとして最低限動くものを作ってから改めてちゃんとブログ書くので次の投稿は早めに出来ると思いますので、その時はぜひ見てください。

押し出しとは

 ここで言う押し出しは、ある物(アクションゲームのプレイヤーである自機、動く敵にあたる)が壁や床の内部に入った時、適した位置にある物を押し出すことを言います。言葉だけだと分かりにくいので図で表すと下のようになります。

 実際のプログラムの手順としては、壁や床との衝突判定を行い衝突していると判定された時、押し出しを行う流れになります。ここで、一つ問題が出てきます。どこに押し出しを行うか?という問題です。

押し出しをする上での問題の解決

 この問題を解決する上で必要になる重要な情報として、「衝突の直前の位置」があります。これが無いと押し出しをする方向について一切考えることが出来ません。

 例えば、上の図は上の方向に押し出しを行っていますが、これは衝突直前の位置が壁や床に対してほぼ真上に位置しているためです。この時重要なことは、「衝突している位置」は押し出しの方向に関係が無いことです(斜めからになると少し関係してきますがそれは後々説明します)。

 それを実感してもらうために、「衝突している位置」はそのままに「衝突の直前の位置」を真下にした場合を考えてみると、次の図のようになります。

 この図の場合は、下の方向に押し出しされていて、それは感覚的にも明らかと思います。

 次は、具体的にどのように押し出しの方向を決めたのかを説明したいと思います。

押し出しの方向決定の具体的な考え方

 今回は前提として長方形同士の押し出しを目的としました。考え方としては以前紹介した長方形同士の衝突判定に近く、今回の説明では上方向と左方向、そして左上方向に焦点を当てていきたいと思います(それ以外の方向も考え方は同じなので省略)。

 押し出しの方向決定は上記書いた衝突の直前の位置と壁・床の位置関係に基づいています。

 まず上方向についてです。上方向については自機等が壁・床より上にあり、左端・右端間にあることが条件となります。図で言うと、水色の範囲(正確に言うと青色の線とその1ドット外側も含む)に自機があると上方向となります。また、黄緑色の範囲にある場合は下方向となります。

 次に左方向についてですが、これは上下方向に関して90°回転させたものと同じで水色の範囲が左方向、黄緑色の範囲が右方向となります。

 では、次になぜこれらの範囲に自機が存在している時にそれぞれ方向が決まるのか説明していきます。具体例として上方向についての状況を考えます。ここで、動く物体は一つ一つの動きが直線的(カーブするように動かないで折れ線グラフのように動く)だとすると、①の水色の範囲にある場合どこで衝突しようとも自機の下側の面と壁・床側の面が必ず最初に衝突することになります。つまり、壁・床の上方向から自機等が内部に入っていくことになるので、内部に入らないようにするには上方向に押し出しすることが適しており、「上方向」と決まります。他の方向も同様に決まります。

 最後に左上方向についてです。まず結論から言うと、左上方向の場合の押し出し方向は「左方向」もしくは「上方向」になります。そして、この違いは、最初の方でも言いましたが「衝突している位置」により置きます。もっと言えば「移動時の傾き」の情報によって方向に変化が起きます。

 図を例として具体的に説明していきます。まず、基準となる情報(基準の傾き)として「自機の右下の点と壁・床の右上の点の傾き(黒色の線分の傾き)」が必要になります。この傾きと「移動時の傾き」の大きさにより決まるわけです。橙色の四角と黄緑色の四角はそれぞれ衝突している位置であり、橙色は傾きが緩めで黄緑色は大きめとなっています。

 橙色の方を見ると、壁・床の上側に最初に衝突していることが分かり、「上方向」の押し出しが適していると分かります。このように基準の傾きより小さいと「上方向」の押し出しとなります。

 また、黄緑色の方は、壁・床の左側に衝突しており、「左方向」の押し出しと分かり、基準の傾きより大きいと「左方向」の押し出しになることが分かります。

 他の斜め方向の押し出しも同様に決めることができ、これで押し出しを適した方向に行うことが出来ます。

アクションゲームの経過報告兼おわりに

 アクションゲームの進捗としては実は自分が思う最低限には動くようにはなってます。具体的に言うと、マップ作り用のプログラム(GUI風)を別に作って短時間で作れるようにしたり、ブログにも書いた衝突判定、押し出しをプログラムとして書いて動作確認したり、自機の動作やちょっとしたギミックなどは出来てます。じゃあ何でそれをブログで出さないのかというと肝心の絵に手を全く手を付けてないからですね。さらに言えば、画力がないせいでそっち方面でモチベが上がらないせいです。

 というわけでこれから一、二週間かけて出来るだけ見せられものにしあげていくので期待しないで待っててください。誰か僕に画力をください。

蛇足

 今回は今まで紹介したゲームに追加情報を加えて紹介したいと思います。

・CUPHEAD-THE DELICIOUS LAST COURSE(DLC)

 延期が続き今年6月末にリリースされたCUPHEADの有料ダウンロードコンテンツ。ボリュームとしてはそこまで大きくはありませんでしたが、隠し要素やちょっとしたやりこみ要素なんかもあり十分楽しめました。今回は基本ボスのみで1つだけミニゲームのようなステージがありました。難易度としては、本編より少し難しいかなと感じる程度でやはりちょうど良い難易度でとても見習いたいものです。

コメント入力

関連サイト