5

そのようなプログラムがどのように構成されているかについて、誰かが光を当てることができますか?

非常に多くの粒子を追跡し、それらに対して衝突検出などをチェックするために、どの Java クラスを使用するのでしょうか? パーティクルは、どのパーティクルが隣にあるか、または落下する可能性があるため、何の隣にもないことを知る必要があります。

サンドゲームが何かわからない場合に備えて、ここに例を示します。

4

2 に答える 2

4

主に配列。

  • 2 つの座標 (および重力加速度が必要な場合は速度) で表される、アクティブに移動する粒子の 1 次元配列。
  • ワールドの固定部分を表す bool (または色) の 2 次元配列。

最も単純な物理モデルは、静止した粒子を削除することです (たとえば、下、左下、右下のワールド位置が塗りつぶされた場合): 代わりに、対応するワールド座標が塗りつぶされます。これにより、計算が管理しやすくなります。 . ワールド座標の下の左または右が空いている場合、グレインを下にシフトできるようにします。移動する粒子間の粒子の衝突は、多くの真実性を失うことなく無視できます。

(最近、どれだけの CPU パワーを割かなければならないか、まったく理解できません!)

于 2010-08-11T17:14:54.727 に答える
1

単純なバージョンは、金曜日のゆったりとした夜に (私が今行ったように) 問題なく実装できます。フィールドを表す 2D 配列 (バイト、整数など) を使用してプログラムを作成するだけです。各ティックで、すべての要素を繰り返し、チェックを行います。

  • 下のフィールド (array[x][y+1]) が空の場合、1 スポット下に移動します (= [x][y] を空に設定し、[x][y+1] を占有に設定します)。
  • [x-1][y+1] が空の場合は、そこに移動します。
  • [x+1][y+1] が空の場合は、そこに移動します。

それが基本です。次に、粒子の計算を「繰り返さない」などのチェックを追加する必要があります (次の反復でチェックされる新しい位置にフラグを設定します)。

私はこのチュートリアルに従いました。これは非常に優れており、長すぎませんが、一般的な落とし穴やそのようなことを指摘しています.

于 2010-08-27T21:26:10.173 に答える