The Quiet Sound of Water

The Quiet Sound of Water

課題メモ:ヘルプ歓迎!


解決の方策が見えなかったり、良い方法の判断がつかなかったりするもの。
もしこのページを読んでいる方で(いないと思うが)、
「こんな方法がよいのではないか」とアドバイスを下さる方(さらにいないと思う)、
大歓迎です。掲示板でもメールでもなんでもいいのでご意見くださいまし。

【課題1:移動処理プロトコルの実装方法】
キャラクターはフィールド上の一定のマスの上に立っているわけですが、移動時には半歩移動、1/4歩移動等するわけです(マスとマスの間をアニメーションしながら移動する)。
この処理をどう実装するか?良い方法が見えていません。
○案1
サーバー側で制御する。
キャラクターの位置データをマス上に持つのではなく、歩数単位で管理する。
例えば1マス移動するのに、4歩動くとしたら、4倍の座標情報をもつようにする。
フィールドのマスの上にいない(移動中)はチャット以外のコマンドを受け付けないなどの制御が必要。
キャラが1マス移動する場合、位置情報が4度変化するわけで、そのたびにサーバー側から位置情報を送信する必要がある。
画面内に大量のキャラクターが存在する場合、通信量が増えることで負荷が高くならないだろうか?
それほどでもないのか?判断に迷う。

○案2
クライアント側で制御する。
キャラクターの位置情報自体は1マス単位で管理する。
移動時にはクライアント側でキャラクターのオフセット情報を管理し、一定時間で1マス分歩くようにする。
例えば1マス移動するのに4歩動く場合、1マスの移動時間を1秒だとしたら、0.25秒ごとにキャラクター位置を1/4マスずつずらして描画する。
通信量は減るが、うまく同期がとれるのか?

という課題があったわけだが、とりあえず自己回答。
もう素直に通信量を算出して考えてみた。
キャラクターが一歩動く情報を送る際に、座標、キャラIDなどを送信するわけだが、多めに見積もって32Byteのデータ量で足りる。
1マス動くのに4歩だとすると、32×4=128Byte。1マス移動するのが1秒だとすると、1キャラが1マス移動するためには、1秒間に128Byteのデータが処理できればよい。
ごく単純に回線の速度からこの数字を検証してみる。
太い回線の場合は良いとして、非常に細い場合。例えばISDN等なら通信速度8Kbpsなんてのも有り得る。
8Kbpsは1024×8÷4Byte。これを1キャラあたりの通信量128Byteで割ってやると、(1024×8÷4)÷128=16。
16キャラが同時に動けるだけの通信量が確保できる計算になる。
MRでは画面の広さを11×11マスと想定しているので、マス目は全部で121。
キャラは重なれないので、1画面内の最大キャラ数も121。
以上の条件から、理論上画面の13%を埋めるキャラが同時に移動できるということになる(※描画処理等含めて考えると実際に動けるキャラ数は減るとは思うが)。
やや少ないか?
現在この文章を書いているマシンの速度を測定したところ、40~51Kbpsという結果が出た。これは平均的なのかそうでもないのか?
仮に40Kbpsだとすると、(1024×40÷4)÷128=80キャラが同時移動可能。
これなら十分な数なのだが。

以上の試算から、案1のサーバー側で制御の手法で実装する方向で問題ないとは思うが、平均的な回線速度がいまいち明確にわからない。平均値次第。
誰か教えて~、平均的な速度(^^;


© Rakuten Group, Inc.
X
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: