2012-01-19 7 views
2

私はビリヤードゲームを作っているので、私の重力はゼロに設定されており、キューボールを動かすためにインパルスを適用します。重力がないので、ボールを減速させるために、直線と角度の両方のダンピングを使用します。重力のないbox2dのオブジェクトのスローダウン

ボールはある程度の速度を持っていますが、現実的には減速します。問題が始まるのは、彼らが多く減速して停止しようとしているときですが、実際には4〜5秒間停止することはありません。その外観は非常に非現実的です。

私が考えた解決策の1つは、すべてのフレームでボールの速度を確認し、ボールがいくらか鳴っている(ボールが停止しようとしている)場合は、ゼロにしてオブジェクトを停止させることでした。このアプローチの問題は、2人のプレイヤーがわずかに異なるフレームレートを持つことができ、同じショットの2つのシミュレーションが矛盾するマルチプレイヤーゲームを作成していることです。

誰も他の解決策を考えることはできますか?

+0

box2dのサポートは分かりませんが、探しているのは摩擦です。 –

+0

私もそのことを考えましたが、ボールと摩擦するものはありません。ボールは他のボールまたはクッションと衝突するのみであり、テーブル(すなわち、テーブルクロスはxおよびyのみで移動するがzでは動かない)とは衝突しない。 – Alex

+1

私は、ボールの動きの方向とは常に反対の固定された力でダンピングを置き換えなければならないと思っています。視覚的に許容できるものが見つかるまで、調整する力​​の量です。 –

答えて

3

私の推測では、あなたが非線形減衰を必要とするということですので、現在の速度に基づいて式で、すべてのフレームに値を線形減衰を編集しよう。

+0

問題は、私はフレームベースで計算をしたくないということです。これはマルチプレイヤーゲームを破る可能性があります(つまり、わずかに異なるフレームレートを持つ2人のプレイヤーが、同じショットの異なるシミュレーションにつながる可能性があります)。 – Alex

+0

@Alex:両方のデバイスで固定時間ステップを使用しない場合、シミュレーションはいずれの場合も少し異なります。 – Andrew

+0

あなたが何を意味しているのか分かりません。私は60 FPSと10 FPSの両方で試合をテストしました(同じショット速度、位置など、FPSを変更しただけです)、まったく同じ結果を提供します(10 FPSではるかに遅いですが)。 – Alex

2

てみb2Bodyの線形減衰パラメータを使用する:

body->SetLinearDamping(0.1f); 
+1

私はそれを行いました。スピードが速い(つまり現実的に遅くなる)ときにはうまくいきますが、ボールが停止しようとしているときに奇妙に見えますが、実際には5〜10秒間停止しません。ボールが停止しようとしていると思うと、この奇妙な効果が得られますが、クッションに当たったり、眠ったりするまで、ずっとずっとずっとスライドしています。私は角ダンピングを追加しようとしましたが、これは助けになりましたが、それでもまだ小さな速度で止まるのに時間がかかります。 – Alex

+0

@Alex:速度がある値よりも小さいときに身体の速度の反対方向にいくつかの外力を手動で加えることができます。それが他の所定の値よりも小さいときは速度をゼロに設定します。 – Andrew

+1

言及したように、マルチプレイヤーゲームを作る。私の理解では、フレームレベルで物理学を混乱させると、2人のプレイヤーの間で同期が崩れて、フレームレートが少し違う可能性があります。私がしたいのは、プレーヤー1がショットを撮って、ショットの特定のデータをプレーヤー2に送信し、それから両方とも自分自身でショットをシミュレートするということです。あなたが言っていることは、実装するのが簡単だとは言えますが、これがマルチプレイヤーゲームを壊すことになると心配しています。 – Alex

1

マルチプレイヤーゲームを作成する場合は、矛盾がないことを確認するために審判員が必要です。両方のクライアントが接続するサーバー、またはクライアントの一方(または両方)がホストになることができます。

重要なことは、各ショットが計算され、表示される前に両者に送信されることです。ビリヤードはターンベースなので、各クライアントは自分のショットをホストし、結果を相手のゲームインスタンスで「再生」するように送信することができます。また、これはレイテンシがあまり問題にならないようにして、フレームボールの位置によってフレームを送ることができるようにするべきです(これは最適ではありませんが、実装するのが最も簡単です)。

サーバーのセットアップの手間をかけずに接続に使用できるものが必要な場合は、pubnub(http://www.pubnub.com/)をご覧ください。アカウントの設定と開発は無料で、設定は比較的簡単です。

希望すると便利です。 ^^