2

PHP から一連の配列を出力し、javascript を使用してキャンバスでアニメーション化するターン ベースの戦略ゲームを開発しています。

javascript/canvas で 20 fps (1 秒あたりのフレーム数) を目指していることを考えると、php はブラウザーが受信して処理するための多くの情報を生成しています。

これらのphp配列をjavascriptに渡すにはどうすればよいですか?

編集私が具体的に言及しているデータの量は、1ターンあたり約5メガバイトです。

4

2 に答える 2

1

あなたが答えようとしている2つの質問があると思います。

  1. どのようにphpからjavascriptにデータを渡すのですか?
  2. php と javascript の間でデータを渡すには、どのような形式が必要ですか?

Q1 に関して: 選択できる手法がいくつかありますが、プロジェクトについてもう少し知らなければ、明確な利点を提供するものはありません。あなたが使用することができます:

  • WebSockets : サーバーとクライアント間の低遅延、双方向通信が必要な場合、またはデータをストリーミングする必要がある場合
  • AJAX: 既知の間隔で、またはイベント (ユーザー クリック) に応答してデータを要求する必要がある場合
  • コメット/ロングポーリング: データが未知の時間にサーバーから「プッシュ」された場合

Q2に関して:

  • JSON: 操作が簡単で、多くのサポートが提供されます
  • MsgPack - より小さなデータ構造、より高速なパーサー

プロジェクトについて詳しく知らずに最適なソリューションを 1 つ選ぶのは難しいですが、このリストが参考になることを願っています。

于 2013-03-09T16:08:30.470 に答える
1

わかりました。5 MB を送信する必要がある場合、あなたができる最善の方法は次のとおりです。

gzip や gzcompress などのデータ圧縮を使用して、5mg のペイロードを減らします。通常、ファイルは元のサイズの約 20 ~ 25% (この場合は 1 ~ 1.25 MB まで) に縮小できます。

とはいえ、5 MB は通常よりもはるかに多いため、ゲームを強化するために必要なデータを再構築することを検討する必要があります。

あなたは私たちに作業するための詳細を与えていないので、ここで私たちが遊ぶための「わら犬」があります.あなたのゲームがチェスであると仮定してください. (そうではないことはわかっていますが、焦点を合わせる何かが必要です)

すべてのレンダリングをクライアントに移動します。送信するデータは、移動 (「Rook-A6」) のみを送信する必要があります。クライアントはそのデータを取得し、Rook を現在の位置から A6 上の新しい位置にグラフィカルに移動させます。

ゲーム ロジックをクライアントに移動します。クライアントは、ゲームの状況に個別に対応できる必要があります。たとえば、クライアントは、プレーヤーがキングを危険にさらそうとする動きを「元に戻す」必要があります。同様に、(「キャッスル キングサイド」) のような複雑な動きのデータを送信する場合、クライアントは、データからの説明を必要とせずに、キング + ルークを適切に動かす方法を知っている必要があります。

パターン認識を実行して、送信されるデータを簡素化/削減します。したがって、チェス盤上の 32 個すべての駒の初期位置を設定するには、(「白の Rook-A1 を動かし、白の Knight-B1 を動かして…など」) の代わりに (「Reset」) を送信します。

セマフォを使用して、ゲーム リソースの可用性を制御します。ゲームの一部で、ユーザーが希少なリソースの共通グループを取得/使用する必要がある場合は、セマフォを使用して、個々のリソースを実際に追跡する代わりに、ユーザーがリソースを「チェックアウト」/「チェックイン」できるようにします。

于 2013-03-09T16:32:35.837 に答える