2012-02-14 4 views
0

ゲームを構築する方法を愚かにしようとしています。描画する "オブジェクト"をたくさん管理する。

多くのテストで遭遇した1つの問題は、描画イベントをたくさん扱うのが難しいことです。

シナリオ: 私はマップを持っており、50 * 50の正方形がjavaでopenglで描かれています。 これらすべてを描画するたびに、すべてのフレーム、私はfor-loopsを使用します。つまり、2500フレーム分のフレームが1フレームずつ描画されます。 は、私はこのようなものを使用します。

for(Y=0;Y<50;Y++){ 
for(X=0;X<50;X++){ 
box[Y][X].draw(); 
} 
} 

は、これを行うのより良い方法はありますか?これはちょうどいい気分にはならない! 最初に描画した後の描画、行列(またはあなたが呼び出すもの:-))の出力を保持する方法はありますか?それで、それをその状態にロードすることができますか?

+0

変更された四角形のみを再描画することはできますか?たぶんちょうど(x、y)のペアを保存して、そのリストを繰り返してdraw()を呼び出します。 –

答えて

2

さまざまな戦略があります。正直なところ、検査する2500個のオブジェクトは「たくさん」ですが、実際にはそれほど多くはありません。これはn次まで最適化できるものです。多くの場合、ボトルネックはオブジェクトを反復するのではなく、描画呼び出し自体にあります。

したがって、オブジェクトを繰り返し処理し、錐体形チェックを行います。つまり、オブジェクトが完全にプレーヤーの視野の外側にあるかどうかをテストします。彼らがいる場合は描画しないでください。 2Dでしか描画していない場合、これはしばしば簡単です。それが3Dなら、より高度な数学が必要ですが、それでもなお直感的な線形代数は必要です。

これからステップアップする一般的な方法は、何らかの種類のシーングラフまたはそれ以外の空間構造です。これはずっと複雑になっていますが、どんな角度であっても2D/3Dコンテンツはいつでもうまく動作します。 (Googleは今のところあなたの友人ですが、質問は非常に自由です)

また、正方形の単純な2Dトップダウンビューがあれば、単純な2D配列を作成し、カメラの座標に基づいて関連する地図。 (カメラの座標XとYの線形変換を行い、配列のインデックスに縮小し、配列座標の矩形を描画します)。

非常に特別な理由がない限り、通常は差分アプローチを推奨しません。場所を移動すると、管理したり、役に立たないことは通常困難です。

もう少し詳しく知りませんが、空は限界ですが、単純なままにしてください。ゲームを作るのは難しいです。

+0

1年前に私が尋ねたときに返信しなかったので、私はちょうど私の心を設定してくれてありがとう! –

+0

非常に親切で、大歓迎です。あなたのプロジェクトはどのようになったのですか? – Kaganar

+0

ああ、私はちょっと実験をやろうとしました。私はまだ時々それをするが、今は別のものに集中する=)もう一度ありがとう –

関連する問題