カメラ/ビューポートを2Dゲームに実装する


20

カメラ/ビューポートを2Dゲームに実装する最も実用的な方法は何ですか?

画面を基準とした位置ではなく、オブジェクトの世界の位置を保存する必要があることを読みましたか?

現在の状況:

XMLファイルからオブジェクトとレベルを読み込む単純な2Dゲームを実装しました。現在、レベルXMLファイルは次のようになっています。

<map>
   <tile obj="ground" x="0" y="555" />
   <tile obj="ground" x="16" y="555" />
   <tile obj="ground" x="32" y="555" />
   ...
</map>

すべてのオブジェクトには、画面上の現在の場所を格納する2Dベクトル「位置」があります。

私が望むもの:

ビューポート/ゲームワールドの図

写真の中の:

  • カメラは800x600または640x480です
  • ブロックとスプライトは16x16ピクセルです。
  • 世界のサイズは異なる場合があります
  • 座標はおそらく画面ではなく世界に対して正規化されるべきでしょうか?
  • プレーヤーのx、yに対するビューポートの位置。プレーヤーがカメラのデッドゾーンに到達したときに移動します(このビデオと同様)。

私は擬似的な例/記事を求めていますが、開発に使用しているものを知る必要がある場合:SDL&C / C ++。


1
ここのコメントに3番目のリンクを追加すると、質問に追加できます。
マイケルハウス

カメラデッドゾーンの意味:youtube.com/watch
v


こんにちは、@ Arthur Wulf White、詳しく説明してください。ありがとう。
bluekirai

あなたが言及するカメラは、ビューをオフセットするためだけに使用される一般的な2Dカメラの特定のバージョンです(回転とズームなし)。追跡動作は、プレイヤーキャラクターとカメラ間の距離を確認し、距離が大きすぎる場合にカメラを移動することで実装できます。
wolfdawn

回答:


19

画面ではなく、ワールドを基準にしてすべてのオブジェクトを配置する必要があります。また、カメラには独自のワールド座標があり、ワールド内の相対的な位置に描画できます。また、カメラをオブジェクトに追従させると便利な場合があります。そのため、オブジェクトがどこにあっても、カメラは座標を使用するだけです。通常、カメラの座標は左上隅からカメラを配置します。これは、カメラの世界位置が写真内で約(0,24)になることを意味します。

カメラが実際に「見る」ことができるオブジェクトの描画に関しては、カメラの世界座標を基準にしてすべてのオブジェクトを描画する必要があります。カメラに対するオブジェクトの画面位置を計算するには、次のようにします。

int screenX, screenY; //screen position of the object being drawn

screenX = object.x-camera.x;
screenY = object.y-camera.y;

明らかにいくつかのオブジェクトは実際にはカメラから見えないため、ビューカリングシステムを実装することをお勧めします。


2

CPU上のオブジェクトを描画する場所を変更するのではなく、ワールドとビューのマトリックスを使用してGPUでこれをすべて行うのが最善です。

そうすれば、カメラを任意に変更することができ(ズームインやズームアウトも!)、魔法のように機能します。描画時間を節約するために、ビューカリングも実行できます。また、ビューとワールドマトリックスを正しくセットアップした後、ワールドを描画するためのコードを変更する必要はありません。

SDLでは、おそらくglOrthoやなどのOpenGL呼び出しをインライン化できますglTranslate

このスレッドを参照してください。


誰かが下票について説明できますか?意味あり。
ハローワールド

1
私は反対票を投じなかったが、これは質問に答えさえしないからだと思う。問題は、GPU対CPUで行う方が効率的であるか簡単であるかではなく、何かを計算する方法についてです。OPは、疑似例を探しているとさえ言いました。カメラ/ワールド/モデル行列の組み合わせを使用する方が効率的であることは間違いありません。そのため、mklingenには少なくともポイントがあります。
ダンワトキンス

この答えはまったく悪くありません!OpenGL / DX開発に特化していますが、実際の位置を変更せずに、カメラコアに基づいて平行移動マトリックスを計算し、カムマトリックスを介してオブジェクトを移動できるので、正しいアプローチです。
nenchev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.