1

私は、このビリヤードゲームに取り組んでいます:

http://cassinlwbg.facebook.joyent.us/quickpool/main.swf

2 つのブラウザ ウィンドウで開くと、2 プレーヤー モードが開始されます。

ショットを作成すると、すべてのショットが他のプレーヤーにコピーされます。

残念ながら、それは十分に正確ではありません。

プレーヤーは次のコードでショットを行います。

protected function makeShot(str:Number, ang:Number):void {

   var vx = str * Math.cos(ang);
   var vy = str * Math.sin(ang);

   var vel = _whiteBall.body.GetLinearVelocity();

   vel.x += (vx * 10);
   vel.y += (vy * 10);

   _whiteBall.body.SetLinearVelocity(vel);

  }

その後、自分のソケット サーバーを介して STRENGTH および ANGLE 引数を他のプレイヤーに送信します。

文字列から数値への変換後でも、まったく同じ(テスト済み)で到着します。

次に、これをリモート ショットとしてリモート プレーヤーに適用します。次のようにします。

//run remote shot
public function applyMove(s:Number, ang:Number){
   makeShot(s, angle);
}

それでも、いくつかのショットの後、ゲームとボールの位置が異なります...これがゲームの流れを壊します.

理由を知っている人はいますか?

ご覧のとおり、両方のゲーム ファイルは同じです。

そんなに偏差があるのは何ですか?

よろしく、ミルザ

4

2 に答える 2

3

Box2D が数値積分を行う時間間隔に影響するパフォーマンスの違いである可能性があります。どういうわけか位置を同期する必要があります。最初に頭に浮かぶのは、1台のマシンをマスターとして、他のマシンをスレーブとして選択し、マスターの位置をスレーブにコピーして、差異が小さいうちに排除することです。

于 2010-12-26T15:06:38.813 に答える
0

まったく同じ画面サイズに依存している可能性はありますか?

randを使用する関数を使用していないことは確かですか? または、入力と同じくらいの時間ですか?

于 2010-12-26T05:11:21.203 に答える