どのように私は、ランダムなシミュレーションを作成することができますか?

StackOverflow https://stackoverflow.com/questions/500995

  •  20-08-2019
  •  | 
  •  

質問

私はこのフラッシュゲームを演奏し、私の後にしてきました私はプログラミングで、この接触のmutate行動を再現できるか疑問に思い始めた「(笑、火災 ')反応初期乗り越えD」。私はそれが少しハニーポットXKCD のようなものだと思います。

私は、粒子が互いに含有壁をオフ偏向シナリオで始まることを考えました。シーケンスは、「変異体」粒子のセット数で開始すると、これらの変異体は、通常の粒子と衝突したとき、彼らは変異体そのものになると思います。私はいくつかのより多くの楽しいこと、後に働くことができます。

私の問題は、これを開始する方法です。しかし、任意の一般的な論文が、私はそれの上にあるかどう - 私は(私は私に知らせて使用する必要があります.NETの異なる部分があります場合、私はC#にかなり新しいですが).NETの描画要素を使用してC#でそれを行うことを計画しています(彼らはもちろんのオンラインで利用可能なら)「それらを読むことに興味をdます。

おかげで、 ロス

役に立ちましたか?

解決

私はいくつかの粒子が中を、あなたが何を考えていると正しい軌道に乗っていると思いますボックスには、ここに罰金を行うだろう。私はあなたがおそらく必要な技術のいくつかのために、このような具体的かつ単純なケースの上に書類を見つけるだろうと想像することはできませんが、バックエンドの実装はレンダラに比べて比較的簡単であるべきます。

簡単な方法を中心に粒子を移動することですあなたが保存オイラー反復する、位置と速度。位置=位置+速度* DT。 dtは、最後のフレームからの時間の変化です。これは、固定dtを維持し、あなたが...これは安定性の問題を軽減し、衝突検出が容易になりますことができれば、レンダラのためのポイントの間を補間するのがベストです。

、壁のオフ粒子を反映するためにそのX成分又は位置のy成分が境界を越え、その後、速度の他の成分、例えばの符号を反転するかどうかを確認します。

if(Math.Abs(position.x_component + velocity.x_component * dt) > x_bound) 
    velocity.y_component = -velocity.y_component;

if(Math.Abs(position.y_component + velocity.y_component * dt) > y_bound)
    velocity.x_component = -velocity.x_component;

あなたが一定のDTを持っている場合、これは非常によく動作しますが、それが変化する場合は、より複雑な何かをする必要があります。ボックスと衝突点を見つけ、の一部をに反映衝突した顔にボックスの外側ベクター

お互いの距離のチェックで粒子を衝突するために、距離が小さすぎる一度反射を誘発する、おそらく最高です。すなわち、彼らは衝突近づきすぎた場合。粒子が球であるかのようにそれらの位置の差である反射の正常ので、速度成分を反映します。

あなたはあまりにも便利gamedev上この記事を見つけることがあります...

この情報がお役に立てば幸いです。

他のヒント

なぜ出発点として、古典的な小惑星のゲームを見ていませんか?ここでのDirectXを使用していないものにALINKであり、C#である。

http://www.codeproject.com/KB/GDI-plus /asteroids.aspxする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top