0

現在、Android プロジェクトで LibGDX を使用していますが、この質問に対する答えは、使用するフレームワーク/ライブラリまたは言語に関係なく役立つと思います。

私がインターネットで見つけたすべてのチュートリアル (LibGDX 用)render()は、アプリケーション全体のメソッドが呼び出されたとき、および各エンティティを描画する直前に、エンティティを移動するような計算を行います。これはおそらく必要だと思います。たとえば、render()メソッドが呼び出されたときに 3m/s で移動する必要があるオブジェクトがある場合position.y = velocity.y * deltaTime、オブジェクトの速度に応じて移動が理にかなっているようなことを行うからです。

しかし、次のような計算についてはどうですか -> AI 制御のオブジェクトが壁にぶつからないようにするため、またはプレイヤーの動きに応じてどのような経路をたどるべきでしょうか? 2D では、さらに 3D では、多くの微積分、数学的演算などが存在する可能性があります... 結果は にリンクされてdeltaTimeおらず、それを意識する必要はありません。また、これによりレンダリングが遅くなる可能性があるため、あまり強力ではない一部の携帯電話やタブレットで実行するとアプリケーションが遅くなる可能性があります。

このタイプの計算は、レンダリング時に行うべきですか、それとも別の Thread で必要な場合にのみ行うべきですか?

4

1 に答える 1

1

実際には、通常、ディスプレイ スレッドにはレンダリング固有のものだけが必要です。明らかに、これはそれ自体でかなり激しいものになる可能性があります. ただし、物理シミュレーションや AI 計算などでユニットの位置を更新するようなことは、別のスレッドにする必要があります (システム リソースとアーキテクチャに応じて、1 つずつ) - そのレンダー スレッドをできるだけ高速にする必要があります。

懸念の分離と呼ばれるものもあります。同じスレッドで、画面上のオブジェクトの位置を更新 (再描画) し、それを移動する場合、2 つのことを行っているため、将来の変更/メンテナンスがより困難になる可能性があります。

マルチスレッド アーキテクチャを実行している場合は、レンダリング中に何かを更新しないようにするための何らかの方法がセットアップに必要であることに注意してください。そうしないと、奇妙な結果が得られる可能性があります。

于 2012-09-04T15:44:33.333 に答える