1

Castle Crashers に似たサイド スクローラーを作成しており、現在は衝突検出に SAT を使用しています。それはうまくいきますが、基本的にz軸に沿ってオブジェクトを画面上で上下に移動できるようにすることで、レベルの「深さ」をシミュレートしたいと思います(このスクリーンショットhttp://favoniangamers.files.wordpress.com/2009/07のように) /castle-crashers-ps3.jpg )。これはアイソメトリック ゲームではなく、視差スクロールを使用しています。

ベクトル クラスに az コンポーネントを追加し、形状の「厚さ」と z 位置に基づいて衝突をカリングする予定です。レンダリング用の形状の位置を計算する方法や、重力によるジャンプを追加する方法がわかりません。z 位置が変化したときに (地面の) 最大 y 値を計算するにはどうすればよいですか? 基本的に、私を混乱させるのは z 軸と y 軸の関係です。

誰かがこのトピックを知っている場合は、リソースへのリンクをいただければ幸いです。

ありがとう!

4

2 に答える 2

4
  1. 衝突検出アルゴリズムを次元にとらわれないようにすることは実際には可能です。1 つの次元に沿って動作する衝突検出器を用意し、それを使用して各次元をチェックします。「これらが衝突しているかどうか」に対する答えは、各次元に沿った衝突検出の論理 AND です。

  2. ゲームは、ゲーム オブジェクトの相互作用と、画面へのゲームのレンダリングを完全に分離するように編成する必要があります。プログラムのこれら 2 つのセクションは、「モデル」と「ビュー」と考えることができます。モデルには、3 つの軸を持つ完全な 3D ワールドがあります。ある程度の痛みがなければ、この時点で半減することはできません。モデルは適切な 3D である必要があります。

ビューはすべてのゲーム オブジェクトの位置を読み取り、カメラ定義を使用してそれらを画面に投影します。この部分では、完全な 3D レンダリング エンジンは必要ありません。あなたが話している視点の正しい専門用語は「斜め」であり、多くの古代中国と日本の巻物や版画に見られます。特に「源氏物語」の画像を探してください.

オブジェクト (地面を含む!) の画面上の位置は次のようになります。

DEPTH_RATIO=0.5;
view_x=model_x-model_z*DEPTH_RATIO-camera_x;
view_y=model_y+model_z*DEPTH_RATIO-camera_y;

正投影の正射投影に変更できます。

DEPTH_RATIO=0.5;
view_x=model_x-camera_x;
view_y=model_y+model_z*DEPTH_RATIO-camera_y;

そしてもちろん、カメラによって定義されたボリュームの外側にあるオブジェクトをカリングすることを忘れないでください。

このメカニズムを使用して、視差レイヤーの配置を処理することもできます。これはもちろん、カメラを正射投影ではなく 1 点透視投影に変更することです。スプライトのレンダリング サイズを変更するためにこれを使用する必要はありませんが、オブジェクトの x 位置を現実的に管理するのに役立ちます。挑戦したい場合は、投影を組み合わせることもできます。深い背景には 1 点遠近法を使用し、前景には正投影のものを使用します。

于 2010-01-14T23:48:28.797 に答える
1

物理計算 (衝突検出など) で使用される概念的な Y 軸と、実際に画面に描画する Y 軸を分離する必要があります。そうすれば混乱しにくくなります。

Y 軸と Z 軸の間に関係がないふりをして法線ごとに計算を行うだけで、実際に画面上にオブジェクトを描画するときに、Y 軸を使用して Z 軸をシミュレートします。

screen_Y = Y + Z/some_fudge_factor;

実際、これが実際の 3D エンジンのしくみです。すべてのワールド計算が完了した後、関数を介して X、Y、および Z 座標が screen_X および screen_Y にマップされます (通常、上記の式より少し複雑ですが、少しだけです)。

たとえば、ゲームに疑似アイソメトリック ビューを実装するには、Z を screen_X 軸に適用して、オブジェクトを垂直ではなく斜めに移動させることもできます。

于 2010-01-14T23:31:06.243 に答える