4

山に落ちる約 3000 個の粒子を持つゲームを作成しています。パーティクルはそれぞれピクセルであり、boolean[][] を使用して、どのピクセルがクリアであるかを設定および確認します。現在、私はこのコードを使用しています

if (!isFalling(m)) {
    if (isClear(getX() + 1, getY()) && isClear(getX() + 1, getY() - 1))
        setX(getX() + 1);
    else if (isClear(getX() - 1, getY()) && isClear(getX() - 1, getY() - 1)
        setX(getX() - 1);
}

問題は、このコードが非常に厳密なピラミッド形状を与え、あまり自然に見えないことです。山に注いだ塩のように見せたいです。私の質問は、粒子の山をシミュレートするアルゴリズムまたはより良い方法を知っている人はいますか? どんな助けでも大歓迎です。

解決策:ここで素敵な記事を見つけました

4

2 に答える 2

3

あなたは大きな仕事を引き受けました :) 粒子を計算して描画する方法だけではなく、粒子がどのように動くべきかを説明するのは物理学です。

スターターとしてこれを見てください:

http://www.daniweb.com/software-development/java/threads/426676/sand-game-problem-with-graphics

ググったら、「パーティクルジェネレーター」や「パーティクルエミッター」を試してみてください。

この質問も参照してください。

これらの Java Sand ゲームはどのようにして非常に多くの粒子を追跡するのでしょうか?

欠けている可能性のある主なものは、ランダム性、エントロピーをシステムに追加することです。

于 2012-10-14T17:46:55.437 に答える
2

したがって、関数は、底に沈んだ粒子を見て、側面を滑り落ちることができるかどうかを尋ね、可能であればその動きに影響を与えます。

これをループしていますか?もしそうなら、あなたは「ボトムアップ」からの粒子を考えているかもしれませんが、滑り運動は山の任意の点で起こるかもしれません. ループを実行する前に粒子リストをシャッフルするか、安定する割合が低くなるまでリストからランダムな要素を繰り返し選択してみてください。

2D 配列の場合、さまざまな方向からループするか、それを混ぜ合わせる他の方法を見つけることができます。ランダムにピクセルを選択することは悪い選択ではないかもしれません。シミュレーテッド・アニーリングが思い浮かびます。

または、スライド条件にランダム チェックを追加することもできます。パーティクルは最初の位置で半安定している必要があるため、側面から滑り落ちる可能性は 50% しかない可能性があります。

お役に立てれば!

于 2012-10-14T17:58:05.160 に答える