キャラクターを画面の中央に配置する方法を教えてください。


8

Legend of Zelda:Link to the Past(トップダウン2Dアクションアドベンチャー)のようなゲームを作成しています。キャラクターが動いたときに画面の中央に留まるようにしたい。

現在、プレイヤーが移動したいときはいつでも、マップのすべてを反対方向に移動します。これは機能しますが、より多くのオブジェクトをワールドに追加すると、それらすべての移動がより複雑になります。

これに取り組むより良い方法はありますか?


19
カメラを作成して移動します。基本的に、すべてはカメラの位置に基づいたオフセットで描画されます。キャラクターを動かすために宇宙を動かすことは、ファーンズワース教授には少し過剰です。
MichaelHouse

1
彼のフューチュラマ参照の彼の参照を参照するための+1:P
ドアノブ2013年

@ Byte56ありがとう、それは私がやっていることに近いので、私はそれをそのままにしておくかもしれません。しかし、それは非常に理にかなっています。それを答えに入れて、受け入れられるようにしたいですか?
asbumste 2013年

どのレンダリングサブシステムを使用していますか?
bobobobo 2013年

回答:


8

これを処理する一般的な方法は、カメラオブジェクトを作成することです。カメラの最も単純な形は単なる位置です。このシンプルなカメラは、現在のビューの「中心」を定義します。したがって、タイル/エンティティのすべての位置を変更するのではなく、描画するときに位置からカメラ座標を差し引くだけです。この状況では、カメラは「移動」しません。

ほとんどの場合、カメラとキャラクターは位置を共有しますが、それらを個別の値として保持したい場合があるため、たとえば、カメラが世界の終わりに達したときにカメラの移動を停止し、移動を続けるプレーヤー。

少し高度なカメラは動きます。すべてのエンティティとタイルはオフセットなしで描画され、レンダリングする位置は変更されます。これは最も基本的なカメラと非常に似ており、選択的レンダリング(drawカメラが認識できるもののみを呼び出す)に対して同じ最適化の多くを実行できます。それは本質的にそれについての別の考え方です。


こんにちはバイト、私はあなたが成功してあなたが言ったことを実装しました...私は思います。しかし、今私は問題にぶつかっています...あなたが見てみるのを手伝ってくれる?一人の男は、私が実際には必要ありませんと述べたcam variables...と別の方法...提供stackoverflow.com/questions/18199373/...
グロウラー

後で確認します。今のところ、チャットで質問することをお勧めします。
MichaelHouse

3

いいえ、これはこれに対処するための間違った方法です。

トラップ検出はどのように行うのですか?プレーヤーが壁の端に達したときはどうですか?あなたの閲覧システムはダンジョンで動作しますか、それともコードのかなりの部分を書き直す必要がありますか?

世界は幾何学です。プレーヤーはジオメトリです。世界は動かない。プレーヤーが行います。カメラの位置をプレーヤーの中心に設定します。 常に。これですべてです。

「ああ、私が世界をスライドさせれば、プレイヤーが動いているように見える」と空想しないでください。1日の終わりに、奇妙な座標系を使用して数学を複雑にするだけです。

OpenGLのレンダリングは実際には「カメラを下向き-zに固定し、すべてのワールドジオメトリを変換および回転して標準的なビューボリュームに収まるようにする」ことで機能しますが、プログラミング時にそのように考えることを意図していませんgluLookAt名前付きパラメータがあるeyelookupの理由を-あなたは賢明な座標系の観点から考えることができるように。


私が開発していたGL UIシステムで私が犯した最大の間違いの1つは、「より単純にするために」標準座標([-1,1])で作業しようとしたことです。すべての画面オブジェクトの座標は[-1,1]でした。これは大きな間違いでした。私は常にこの[-1,1]の範囲で考え、ピクセルとNDCの間で変換し、元に戻していました。NDCで作業するというこの考えをあきらめて、レンダリングする直前にピクセルで作業し、NDCに変換する想定どおりに画面上に要素を配置することを考えるのがいかに簡単かという点で世界に違いがありました。入力イベントなどの処理
bobobobo 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.