HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1213
Buzzworlds000ゲーム画面の送信について6未解決


Buzzworlds000

リンク

2011/12/13(Tue) 21:08:31|NO.43734

現在4人同時対戦型シューティングゲームを作成しているものですが
いままでは、プレイヤーが動いたり弾の発射、座標などすべてホストが処理しすべてホストに合わせて
同期するという方式をとっていました。

その合わせかたというのが、ホストが処理し終えたデータの値をgDPを使ってメッセージとして送って
いたのですが、それがかなり膨大でして処理が重いので別の方法がないかと考えています。

すべてのプレイヤーの画面はみんな同じなので、ホストの画面ごとコピーして送ることはできないだろうか?
と思ったのですが可能でしょうか?

メインループ1回 処理するごとに画像コピーして送信するので大量に何回も送ることになりますのでそれに適した送る方法を探しています





この記事に返信する


ORZ

リンク

2011/12/13(Tue) 21:31:10|NO.43737

もちろん可能。
だが、画面を送信するということはつまり画面のRGB値を全部記憶して送るということか?
仮に画面の解像度が640x480だったとしよう。1ピクセルはR0-255,G0-255,B0-255の値をとるものとする。
つまりRGBそれぞれ1バイトで合計3バイトだ。
640x480ピクセルが全部3バイトずつ使うので、総データ数は

640x480x3=921600 (ばいと)

これを1024で割ると900、つまり900KBものデータ量となるぞ。
これを3人のプレイヤーに同時に送信するのだから2700KB、毎秒30フレームだとしてx30で約80MB。
これが1秒間に君が送らねばならないデータ量だ。

やや暴力的な計算だが、君がクライアントに送信している何らかのデータが秒80MBを超えていないなら
HPや座標等の数値をやり取りしたほうが効率がいいことは言うまでもないだろう。まず通信頻度を見直し
圧縮できるデータは圧縮してやる必要があろう。
どうしても画像で送信したいんだよコノヤロウという場合は、同じ色の画素が連続する場合などを考え
自分でデータを圧縮してやる必要があるぞ。いばらの道だな。



XBG|YAMANOTE231103(PC)

リンク

2011/12/13(Tue) 21:39:55|NO.43738

画像ごと送信するという致命的に重い方法ではなく
まずプレイヤーごとの時期座標とかで送信したほうが…



Buzzworlds000

リンク

2011/12/13(Tue) 21:54:43|NO.43741

ORZさん 分かりやすい回答ありがとうございます。

いままでのプレイヤーの座標、弾、弾の座標などメッセージで送信して同期しようと思います。

ただ今のプログラムでは送信内容が多いのでそれを少なくするように工夫します。
自機の移動+8ずつずらして移動させてましたが、それをもっと大きくして ロックマン? みたいな
大きな四角系の中を自由に移動できるという方式にしたいと思います。

ここで質問してよかったです。 それではがんばってプログラム変更してきます。



f(現実逃避中)

リンク

2011/12/14(Wed) 16:22:27|NO.43750

・・・ん?・・・ああ・・・。


宣伝のようになってしまうが、俎板においてあるAskの方が処理が軽い。
gDP書式でそのままAskが使えるモジュールも添付してあるので、
試してみるのはどうか。

データ量が多すぎるとなると、別の問題になるが・・・。



mmo

リンク

2011/12/15(Thu) 07:59:45|NO.43754

弾の座標については、わざわざ送信しないといけないのでしょうか。
弾の処理などは各自クライアントにまかせるようにし、
送受信はプレイヤーの処理と弾射出判定のみ行えばいいのではないでしょうか。

・弾射出判定とは

プレイヤー○番から弾発生=1と言う処理が届いた。
プレイヤー○番の方向から直線の弾が飛び出る。

プレイヤー○番から弾発生=2と言う処理が届いた。
プレイヤー○番の方向から楕円運動の弾が飛び出る。

など。
シューティングゲームであれば全くの完全同期である必要は無いとも思えます。
ホスト処理であると、プレイヤーが避けたのになぜかダメージをくらった
など、不都合・不満が生じる場合もあるので食らう側のプレイヤーが有利に働くように
クライアント側で当たり判定をする処理が必要とも思えます。



f(現実逃避中)

リンク

2011/12/15(Thu) 09:07:07|NO.43755

ちなみにgDP付属のサンプルゲームは

・10フレームに1回「現在の位置と向き」と「現在移動目標にしている位置と向き」を送信。
・実際の表示は定期的に送られてくるそれらの位置情報と「今実際に表示している位置」とを徐々にすり合わせながら表示。
・弾は「発射位置」と「方向」だけ全体に通知。移動は各クライアントが管理、命中判定はホストが管理。

こんな感じのようだ。
今見直したら。



ONION software Copyright 1997-2023(c) All rights reserved.