2Dトップダウンマップ:正規化かどうか?


11

私はゲームプログラミングの初心者ですが、この質問の定式化が不十分な場合、私の側のだらしさではなく、ゲームプログラミングの経験の欠如であることに注意してください。

私がコーディングする予定のゲームでは、トップダウンの2Dマップを「世界」として使用します。ワールドはウィンドウよりも大きくなる場合があり(ウィンドウはズームインまたはズームアウトできます)、車両はワールドの任意のポイントに配置できます(=タイルマップではなく、空間は「連続的」です)。

例で明確にするために:世界が1000x1000メートルの地形である場合、車両は(327.31、720.4)メートルの位置にあります。

私の質問は、内部で世界を表す最も便利な方法は何ですか?私はこれらの可能性を考えることができました:

  • 何もせず、対象物を扱っているかのようにメーター使用します。
  • 最大ズームで1000メートルを表すためのピクセル数として世界サイズを定義するピクセルに正規化し
  • サイズ1の正方形として単語を定義する1に正規化する

...しかし、他にもあるかもしれないし、私の一部は意味をなさないかもしれないと確信しています。それは私の最初のゲームであって、私は自分の前にある問題の明確な写真を持っていないというだけのことです。合理的に正しい初期選択を行うためのガイダンスをお願いします。

お時間をいただきありがとうございます。


私はこの問題を抱えていました。回答として投稿するつもりはありません-そこにはすでに素晴らしいものがあります。ただし、任意の単位で作業する場合は、単一の値を調整するだけで、任意の解像度をサポートできます。また、ゲームプレイの面でも対処がはるかに簡単です。最後に、ピクセル測定などの数値が大きいと、物理シミュレーションが爆発する可能性があります。
共産主義者のダック

回答:


10

距離の基準として実際の値(メートル、フィートなど)を使用することに同意します。他の2つの提案の問題は、どちらも変数であることです。のワールドサイズを使用1すると、すべての演算が-1から1の間の浮動小数点になり、浮動小数点エラーが増える可能性があります。また、ワールドサイズを可変にすることを決定した場合(長いゲームでは「大きな」ワールドなど)、コードに多くの問題が発生します。同様に、ピクセルを使用する場合、最大/最小ズームレベルであっても、ズームレベルを増減することにした場合に問題が発生するだけでなく、混乱に陥ります。


この答えは素晴らしい(+1)です。特に、世界のサイズに「1」を使用する場合の潜在的な問題を説明した方法が気に入っています。
ランドルフリチャードソン2011

完全に構成されていても、物理シミュレーションの種類を実行している場合、固定小数点整数を使用すると無効な結果が発生します。あなたがしなければならないのは、対角線上で単位速度で移動する単一の車両をモデル化することだけであり、その位置を適切に表現する方法がないことがわかります。
edA-qa mort-ora-y 2011

3
同意RE:メーターを使用。また、物事を精神的に視覚化して理解するのにも役立ちます。「その車両の長さは5メートル」、または「これら2つのオブジェクトは500メートル離れている」ため、何をしているのかを感じるために常に暗算をする必要はありません。
Tim Holt、

-1整数演算が浮動小数点よりも高速であるという記述は一般的には当てはまりません。実際、ほとんどの最新プラットフォームでは高速です
Maik Semder

2
それでも絶対位置に固定小数点値を使用することは良い考えです。これは、世界中で一定の精度と同一の物理につながります。
CodesInChaos

7

あなたが提案した3つのオプションのうち、メーターを使用するのがおそらく最善でしょう。他のデータを作成するときに、メートル単位で長さを扱うと、はるかに楽になります。他の理由の中で、あなたはあなたの世界のサイズを変更することに決めるかもしれません、または異なるレベルは異なるサイズのマップを必要とするかもしれません。

フィート(またはインチ)を使用することもできます。この決定の一部は、使用するミドルウェアパッケージに依存する可能性があります-一部の物理エンジンは、あるユニットタイプまたは別のユニットタイプを好みます(ほとんどの場合、構成可能です)。ほとんどの場合、ユニットを選択してそれを使用できます。


5

「1」に正規化することは、実際に行く方法ではありません(正方形でない世界がある場合、またはサイズの異なる複数の世界がある場合はどうでしょう...)。

ピクセルを...として使用...ゲームプレイとグラフィックの測定値を混同しないでください。コードを変更せずにグラフィックを変更できないように、自分をロックしないでください。

メートル(フィートまたはあなたが最も好きな測定値)は、そのための方法です。ミサイルランチャーを50 km / hで移動するようにコーディングすると、0.00076ユニット/秒よりもはるかに快適になります...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.