Legend of Zelda:Link to the Past(トップダウン2Dアクションアドベンチャー)のようなゲームを作成しています。キャラクターが動いたときに画面の中央に留まるようにしたい。
現在、プレイヤーが移動したいときはいつでも、マップのすべてを反対方向に移動します。これは機能しますが、より多くのオブジェクトをワールドに追加すると、それらすべての移動がより複雑になります。
これに取り組むより良い方法はありますか?
Legend of Zelda:Link to the Past(トップダウン2Dアクションアドベンチャー)のようなゲームを作成しています。キャラクターが動いたときに画面の中央に留まるようにしたい。
現在、プレイヤーが移動したいときはいつでも、マップのすべてを反対方向に移動します。これは機能しますが、より多くのオブジェクトをワールドに追加すると、それらすべての移動がより複雑になります。
これに取り組むより良い方法はありますか?
回答:
これを処理する一般的な方法は、カメラオブジェクトを作成することです。カメラの最も単純な形は単なる位置です。このシンプルなカメラは、現在のビューの「中心」を定義します。したがって、タイル/エンティティのすべての位置を変更するのではなく、描画するときに位置からカメラ座標を差し引くだけです。この状況では、カメラは「移動」しません。
ほとんどの場合、カメラとキャラクターは位置を共有しますが、それらを個別の値として保持したい場合があるため、たとえば、カメラが世界の終わりに達したときにカメラの移動を停止し、移動を続けるプレーヤー。
少し高度なカメラは動きます。すべてのエンティティとタイルはオフセットなしで描画され、レンダリングする位置は変更されます。これは最も基本的なカメラと非常に似ており、選択的レンダリング(draw
カメラが認識できるもののみを呼び出す)に対して同じ最適化の多くを実行できます。それは本質的にそれについての別の考え方です。
cam variables
...と別の方法...提供stackoverflow.com/questions/18199373/...
いいえ、これはこれに対処するための間違った方法です。
トラップ検出はどのように行うのですか?プレーヤーが壁の端に達したときはどうですか?あなたの閲覧システムはダンジョンで動作しますか、それともコードのかなりの部分を書き直す必要がありますか?
世界は幾何学です。プレーヤーはジオメトリです。世界は動かない。プレーヤーが行います。カメラの位置をプレーヤーの中心に設定します。 常に。これですべてです。
「ああ、私が世界をスライドさせれば、プレイヤーが動いているように見える」と空想しないでください。1日の終わりに、奇妙な座標系を使用して数学を複雑にするだけです。
OpenGLのレンダリングは実際には「カメラを下向き-zに固定し、すべてのワールドジオメトリを変換および回転して標準的なビューボリュームに収まるようにする」ことで機能しますが、プログラミング時にそのように考えることを意図していません。 gluLookAt
名前付きパラメータがあるeye
、look
とup
の理由を-あなたは賢明な座標系の観点から考えることができるように。