1

タイトルはかなり自明だと思いますが、明確にするために、衝突がどちらの側で発生したかを知る方法を理解しようとしています。

もう少し詳しく言うと、迷路のようなゲームを作ろうとしているので、衝突時にすべての動きを単純に止めることはできません。代わりに、どちら側で衝突が発生したかを識別できる必要があるため、その方向をブロックできます。

この問題に対するより良いアプローチがあれば、それを試してみてください。

これで十分な詳細であることを願っていますが、さらに必要な場合は、お問い合わせください。編集します. 前もって感謝します。

[編集] @viggity - いいえ、私は特定のゲームエンジンを使用していません。現在の「検出」コードを投稿しますが、それは少しばかげて堅牢です。

@Streklin - this.Paint イベントを使用してフォーム自体に描画することが推奨されているため、リアルタイムでの描画を改善するためにそれを行うことから始めます。また、押したもの (左、右、上、下) に基づいてタイマーが刻むたびに更新される場所も使用しています。はい、迷路はタイルベースです。現在、3色のみで構成されています。私は非常に高度なプログラマーではありません。

@Eric - 間違いなく1Dゲーム。繰り返しますが、3 色しかありません。線は黒、背景は白、正方形 (ユーザー) は緑です。画面に描画するために Bitmaps で DrawImage() を使用しています。

[疑似コードの要約を編集]

foreach(Wall _wall in 壁) if(player.intersectsWith(_wall)) 動きを止める;

@JeffH - 私が試して動作させるために使用していたコードをテストする以外に、それがほとんどすべてであるため、あなたが何を求めているのかよくわかりません。私が省略したのは、x と y が互いに独立して移動できるように、それが x 軸であるかどうかを確認する if ステートメントだけでした。そのため、壁に触れたために「立ち往生」する代わりに、壁に向かって滑ることができます。問題はその前に発生するため、それを含める意味がわかりませんでした。

4

2 に答える 2

4

ここで 3D ゲームについて話していると仮定します。

見ることができる顔の法線はあなたの方を向いているので、方向ベクトルと顔の法線との内積は負になります。陽性の場合は、後ろから顔に向かっています。

ゼロの場合、面に対して直角に移動しています。

|              <---------- your direction of travel
|
|----------> <- face normal
|
| <- face

3D でない場合は、壁が向いている方向を (2D ベクトルとして) 保存し、2D の移動方向と同じドット積を実行できます。

于 2009-09-30T20:07:28.077 に答える
0

あなたの編集に基づいて、一度に一方向しか進むことができませんか? それとも斜め方向にいけますか?後者の場合、ChrisF は 3D での回答と 2D の対応する情報を提供しています。そうでない場合は、移動方向への移動を停止する必要があります。可能性は 4 つしかないため、単純なスターター ゲームですべてを確認するのは簡単です。

于 2009-09-30T20:56:19.793 に答える