1

HTML5 キャンバスと Google App Engine の Channel API の学習を始めたばかりです。

アイソメ マップに基づいて簡単なゲーム デモを作成します。今はキャラクターの動きを実装したいのですが、どのように実装すればよいか悩んでいます。

現在のデモ: http://cheukalex.appspot.com

これは私がそれが実装されると思う方法です:

クライアントは移動を処理します。矢印キーを押すと、クライアントが移動を実行し、新しい調整をサーバーに送信します。これは、サーバー上の他のユーザーにブロードキャストされ、キャラクターの位置が更新されます。

私が考えた問題:

  1. 「移動速度」を実装したい場合はどうすればよいでしょうか。たとえば、ユーザーが 5 マス歩く速度などです。各動きの間の遅延は、クライアント側で行われます。しかし、それは安全でしょうか?JavaScriptは簡単に編集できるからです。

  2. レイテンシーに対処するにはどうすればよいですか? 単純な追跡タグ ゲームを作成した場合、ユーザーを同期して、あるユーザーが別のユーザーに「タグ付け」しているように見えても、別のユーザーが 1 ~ 2 スクエア後ろにいるのを見ないようにするにはどうすればよいでしょうか?


編集: @nycynik、その通りです。レイテンシは約 200 ミリ秒です。ここでテストしました。

レイテンシ テスト: http://cheukalex.appspot.com/latency

これは、これまでにない最小のレイテンシです。200ミリ秒はかなり速いです。それでは、私のコードが遅いのでしょうか?

ゲーム全体を実装する方法は次のとおりです。

  1. クライアントがウェブサイトに入る
  2. サーバーはトークンを作成し、チャネルを開き、クライアント データ ( channel id ) を DB に保存します
  3. ....いくつかのロジック
  4. クライアントが矢印キーを押すと、どのクライアントがどの方向に移動したかをサーバーに通知します
  5. サーバーは動きを受け取り、ロジックを実行し、データベースをループし(現在オンラインのクライアントのみ)、すべてのクライアントにメッセージをブロードキャストし、json でマップ上のすべてのクライアントの位置を示します。その後、クライアントは「移動」します。

これで何か問題がありますか?

4

2 に答える 2

2

これは最初の回答へのコメントであるはずでしたが、収まりません。

現時点ではネットワーク遅延が実際に問題になるため、応答時間に関してできることはあまりないかもしれません。おそらく、ユーザーエクスペリエンス側で作業することができます. ユーザーが遅延を「許容できる」ようにするために、アニメーションを追加してみませんか?

たとえば、ユーザーが矢印キーを押すと、馬がゆっくりと引き戻され、ジャンプの準備ができているように見えることがあります (舞台裏で Channel API を介してリクエストを送信しています)。サーバーから応答を受け取ると、馬はジャンプを完了して別の位置に着地できます。

レイテンシの問題は依然として存在しますが、レイテンシがそれほど明白でない場合、ユーザーはそれを「許容できる」と感じるかもしれません。

于 2012-04-18T00:48:34.860 に答える
1

「移動速度」を実装したい場合

移動をサーバーに送信し、サーバーにボードを更新させることをお勧めします。これにより、各プレーヤーの同期が維持されます。

レイテンシーに対処するにはどうすればよいですか?

必要に応じて、サーバーが位置の更新を送信する前に、すべてのクライアントが報告することを要求できます。これにより、一貫性が強制されますが、LCD アプローチになります。このタイプのゲームでは、うまくいくはずです。

EDIT:もともとネットワークソケットが機能するように機能すると思っていましたが、結果はそれよりもはるかに遅いようです。それはコード内の何かかもしれませんし、テクノロジー自体かもしれませんが、あなたがやろうとしていることに対して十分な速さではないようです。これがチェスのゲームなら、あなたは大丈夫でしょう。しかし、このタイプのゲームでは、より高速な往復が必要です。

この投稿は、予想される時間に言及しています

Channel API の配信速度は 100 ~ 200 ミリ秒程度です。

新しいチャネル作成制限の操作

それはあなたが得ているものよりも速いはずです。

于 2012-04-17T20:48:57.360 に答える