3

学習目的でやろうとしている単純なゲームがありますが、特にDirectXでは、行列は少し難しいです。

私は現在、画面にタイルをレンダリングし、中央に文字の位置をレンダリングするタイルシステムを持っています(起動時)

プレイヤーが左に移動すると、地面が右に移動して、常に画面の中央にくるようにする必要があります。スプライトを使用してタイルとプレーヤーを変換しますが、地面が動いていて、プレーヤーが中央に位置している地面に静止しているため、問題が発生します。

これはトップダウンの2Dゲームなので、位置(およびおそらく回転)を変換するだけで済みます

私のCameraクラスには次のメソッドがあります。

D3DXMatrixTransformation2D(&View, NULL, 0, &Scale, &Center, D3DXToRadian(Rotation), &Position);

私も試しました(カメラ用):

D3DXMatrixTranslation(&View, Position.x, Position.y, 0);

次に、グラウンドスプライトをレンダリングするときに、カメラに変換するように設定しましたが、プレーヤーには、移動時に使用する独自のマトリックスがあります。

上記のものとまったく同じですが、彼の位置、回転などがあります...

何が欠けていて、何が必要ですか?

私は画面の幅/高さに合うタイルシステムしか持っていないので、彼が動いているときに見る必要がありますが、彼は中央と地面に静止していて、プレーヤーは動いています。

地面が反対方向に動くようにマトリックスを反転する必要がありますか?

プレイヤーだけがここに移動し、世界は彼の周りを変化します。

例

ゲームプログラミングでナンバーワンの言語であるため、「2Dのトップダウンカメラ」のような簡単なことを説明するガイドはほとんどありません...

4

2 に答える 2

2

あなたの問題については、オブジェクト空間、ワールド空間、カメラ空間など、さまざまな空間について何かを読む必要があります。(主に 3D 空間に関連して言及されますが、2D について説明しようとします)

オブジェクト空間 各オブジェクトはモデル化するか、あなたの場合はオブジェクト空間に描画する必要があります。これは、オブジェクトごとに、たとえばプレーヤーの中心を決定するマトリックスであることを意味します。

ワールド空間 これはあなたのゲームの世界です。シーン内の各オブジェクトの位置と方向を記述します。

カメラ スペース これは、ゲーム ワールドの現在のビューを表します。カメラは画面の中央に固定されていると想定され、ワー​​ルド全体を現在の視点に合わせて移動します (たとえば、負の位置で移動します)。

あなたの場合、各オブジェクトのマトリックスが必要であることを意味します。これは、画像が位置(オブジェクトスペース)で正しく中央に配置されるオフセットを記述します。次に、オブジェクトをワールド空間に変換する必要があります。したがって、オブジェクトの位置と向きを含むマトリックスが必要であり、それを objectmatrix で乗算します。最後に、オブジェクトがワールド空間からビュー空間に変換されるように、視点を考慮してカメラ行列を乗算する必要があります。結果のマトリックスは、レンダリングに使用するものです。

それが役立つことを願っています:)

于 2013-02-03T19:24:19.597 に答える
0

チャットで人々の助けを借りて、システムの問題が何であるかを理解しましたが、同様のことを試みましたが、おそらく間違った方法/順序でした.

配置だけの単純な 2D トップダウン カメラの場合:

Camera2D 変換:

D3DXMatrixTranslation(&CameraView, Position.x, Position.y, 0);

カメラのビュー内の各オブジェクトについて:

D3DXMATRIX ObjectWorld;
D3DXMatrixTransformation2D(&ObjectWorld, NULL, 0, NULL, NULL, 0, &Position);

D3DXMATRIX Translation;
D3DXMatrixMultiply(&Translation, ObjectWorld, CameraView);

次に、スプ​​ライトをレンダリングします。

sprite->SetTransform(&Translation);
sprite->Draw(Texture, NULL, NULL, NULL, Color);

この方法では、プレイヤーが動いている方向とは反対の方向にカメラを移動する必要があります。そのため、プレイヤーが +100 移動している場合、カメラはプレイヤーに対して同じ位置に配置されるように -100 移動する必要があります。

于 2013-02-04T09:14:40.657 に答える