質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

1977閲覧

斜め移動でマップチップと当たった時に、当たっているマップチップに沿って移動させたい!

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/07/20 13:16

編集2019/07/20 13:31

前提・実現したいこと

私はゲームプログラミングを勉強しており、実際にゲームを開発しております。
そんな中で、マップチップとプレイヤーとの当たり判定後の「処理」で困っています(当たり判定は出来ています)。
プレイヤーは45度ずつ8方向にキー入力で移動でき、マップチップとプレイヤーとの当たり判定は矩形でとっています。
実現したいのは、以下の画像のような移動です。
イメージ説明
以下が当たり判定と処理です。

  1. プレイヤーの座標から近くの触れているマップチップの識別番号を取得し、その識別番号が当たり判定を行いたいマップチップの識別番号だったら当たり判定を行う。
  2. プレイヤーが動いている方向を判定する(押しているキーで判定しています)。
  3. 左右に動いている場合

3-1. プレイヤーのx座標を当たり判定前のx座標に戻す。
3-2. 再度、今のプレイヤーの座標で1の当たり判定を行う。
3-3. 当たっていたらプレイヤーのy座標を1の当たり判定前のy座標に戻す。
0. 上下に動いている場合
4-1. プレイヤーのy座標を当たり判定前のy座標に戻す。
4-2. 再度、今のプレイヤーの座標で1の当たり判定を行う。
4-3. 当たっていたらプレイヤーのx座標を1の当たり判定前のx座標に戻す。

発生している問題・エラーメッセージ

実現したい移動にはならず、当たり判定された場所で止まってしまいます。
以下の画像のような感じです。
イメージ説明
原因としては、キーで移動している方向を判定しているため、3と4の当たり判定を同時に行ってしまうからです。
例えば・・・
Aキーで左、Dキーで右、Wキーで上、Sキーで下のように移動している方向を判定させると、斜め移動は左右のどちらかの移動方向と、上下のどちらかの移動方向の両方の判定を行ってしまいます。

試したこと

3か4のどちらかを判定と、それに関連する処理をコメントアウトすると左右もしくは上下の当たり判定される部分で実現したい移動ができます。

補足情報(FW/ツールのバージョンなど)

VisualStudio 2019
VC++
DirectX

どうかお知恵をお貸しください。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

当たり判定された場所で止まってしまいます。

そこで処理を終了せずに,
残りの予定されていた移動量に関して,接触した辺(面)の法線方向成分を除去した上で
再度移動処理を行えばよいのではないでしょうか.

投稿2019/07/21 06:08

fana

総合スコア11652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

斜め移動で斜めにチップに当たった場合に, 上下と左右とどちらを優先するかを決めておくということになるかと思います.
もしくは, 例えばチップは方形でも画像としては斜めの絵だったりがある場合は、チップ毎に「どの様な接触時にどの方向に滑り易いか」のデータを持たせて, そのデータから上下か左右を選択するということも考えられます.

投稿2019/07/20 14:03

jimbe

総合スコア12632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/20 14:59

教えて頂き、ありがとうございます! 今回はYAmaGNZさんに教えて頂いた方法で実装させて頂きました。 しかしながら、厳密に当たり判定を行うとなるとjimbeさんの方法が必要だと思いますので、参考にさせて頂きます。 助かりました!
guest

0

ベストアンサー

1.押されているキーにより、X座標、Y座標の移動量を求める。
2.X移動の判断
2-1.X移動量が0であれば判断しない
2-2.現在位置+X移動量のところに移動不可能であれば、X方向の移動量を0とする。
3.Y移動の判断
3-1.Y移動量が0であれば判断しない
3-2.現在位置+Y移動量のところに移動不可能であれば、Y方向の移動量を0とする。
4.X移動量、Y移動量で移動する。
でいいのでは?

投稿2019/07/20 13:55

編集2019/07/20 13:59
YAmaGNZ

総合スコア10242

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/20 14:53

教えて頂き、ありがとうございます! 無事に実装することが出来ました! 今までは移動スピードを直接プレイヤーの座標に加算・減算していましたが、x軸方向とy軸方向の移動量を求めてそれぞれのプレイヤー座標に加算するという方法を学べました。 これから生かしていこうと思います。 助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問