質問: ### 前提・実現したいこと 私はゲームプログラミングを勉強しており、実際にゲームを開発しております。 そんな中で、マップチップとプレイヤーとの当たり判定後の「処理」で困っています(当たり判定は出来ています)。 プレイヤーは45度ずつ8方向にキー入力で移動でき、マップチップとプレイヤーとの当たり判定は矩形でとっています。 実現したいのは、以下の画像のような移動です。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/6360c53dcbcd32371dae4ab6af3ca2c4.png) 以下が当たり判定と処理です。 1. プレイヤーの座標から近くの触れているマップチップの識別番号を取得し、その識別番号が当たり判定を行いたいマップチップの識別番号だったら当たり判定を行う。 2. プレイヤーが動いている方向を判定する(押しているキーで判定しています)。 3. 左右に動いている場合 3-1. プレイヤーのx座標を当たり判定前のx座標に戻す。 3-2. 再度、今のプレイヤーの座標で1の当たり判定を行う。 3-3. 当たっていたらプレイヤーのy座標を1の当たり判定前のy座標に戻す。 4. 上下に動いている場合 4-1. プレイヤーのy座標を当たり判定前のy座標に戻す。 4-2. 再度、今のプレイヤーの座標で1の当たり判定を行う。 4-3. 当たっていたらプレイヤーのx座標を1の当たり判定前のx座標に戻す。 ### 発生している問題・エラーメッセージ 実現したい移動にはならず、当たり判定された場所で止まってしまいます。 以下の画像のような感じです。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/c2579dc2d35fb2a0cdf852abcb3e0243.png) 原因としては、キーで移動している方向を判定しているため、3と4の当たり判定を同時に行ってしまうからです。 例えば・・・ Aキーで左、Dキーで右、Wキーで上、Sキーで下のように移動している方向を判定させると、斜め移動は左右のどちらかの移動方向と、上下のどちらかの移動方向の両方の判定を行ってしまいます。 ### 試したこと 3か4のどちらかを判定と、それに関連する処理をコメントアウトすると左右もしくは上下の当たり判定される部分で実現したい移動ができます。 ### 補足情報(FW/ツールのバージョンなど) VisualStudio 2019 VC++ DirectX どうかお知恵をお貸しください。 よろしくお願い致します。
回答: 斜め移動で斜めにチップに当たった場合に, 上下と左右とどちらを優先するかを決めておくということになるかと思います. もしくは, 例えばチップは方形でも画像としては斜めの絵だったりがある場合は、チップ毎に「どの様な接触時にどの方向に滑り易いか」のデータを持たせて, そのデータから上下か左右を選択するということも考えられます.