Browse by Tags

Tagged Content List
  • Blog Post: ネットワークゲームに関する記事まとめ

    ツイッターの方でネットワークゲームに関する話題が上がったので、以前投稿したネットワークゲームに関する物をまとめてみました。これらの記事はXNA向けに書かれた物ですが、基本的な考え方やテクニックはどのプラットフォームでも同じなので参考になれば幸いです。 ネットワーク その1 レイテンシ ネットワーク その2 パケットロス ネットワーク その3 帯域 ネットワーク その4 帯域 ボイスチャットについて ネットワーク その5 圧縮 ネットワーク その6 量子化で圧縮 ネットワーク その7 ビットフィールドで圧縮 ネットワーク その8 算術符号化圧縮 ネットワーク その9 究極の圧縮方法 ネットワーク...
  • Blog Post: リモートコマンド

    ねことプログラマーとXNAの友好な関係の為に デバッグコマンド はゲーム開発する上では欠かせないツールの一つですがXbox 360上で使用するにはUSBキーボードが必要になります。私の場合は新し物好きで定期的にキーボードを買い換えるので家の中には使っていないキーボードが幾つかあり、いならくなったキーボードを使っていました。 ですが、最近になって11年物のTVが写らなくなってしまい、ようやっとHDTVというものを購入しました。新しいTVの画面上で自分の作ったゲームが動いているのを見るのは楽しいので、リビングルームでソファに座りながらプログラムするという機会が増えました。 そこで、新たに起きた問題が発生しました...
  • Blog Post: 招待サンプル

    今日は 招待サンプル を紹介します。 Xbox Live!の機能のひとつに、フレンドリスト内の友達と一緒にネットワークゲームをプレイしたいときに誘える招待機能があります。XNA GS 3.0ではこの招待機能がサポートされています。招待するケースとしては以下の二つのケースがあります。 同じゲームをプレイしている時(In-Title Invites) 違うゲームをプレイしている時(Cross-Title Invites) XNA GS 3.0上では、このどちらのケースでも NetworkSession.InviteAccepted イベントが発生します。このイベントを受け取った時に...
  • Blog Post: ネットワーク その10 オブジェクト所有権

    クライアント/サーバー と ピア・ツー・ピア 型のどちらのネットワーク形態が優れているのかを議論するのが好きな人たちがいます。しかし、個人的にこの議論は間違ったものだと思います。誰が 「どちらか一方のネットワーク形態を選ばなくてはいけない」 と言ったんですが?私は両方の長所を活かしたハイブリット形式の大ファンです。 ネットワークプログラミングは妥協との戦いです。100%の正確さと、ラグがまったく無いという2つの状態を両立することは不可能で、トレードオフをしなければいけません。 時にはラグが多少大きくっなっても正確さをとる場合もあれば、逆に正確さを犠牲にして高いレスポンスを必要とする場合もあります...
  • Blog Post: ネットワーク その9 究極の圧縮方法

    今まで紹介してきた狡猾な圧縮方法より効果的なデータ圧縮方法があります。それはデータ自体を送らないということです。 もちろん、まったくデータを送らないのでは相手側との同期ができません。でも、時には同期すること自体が重要ではない場合があります。 2つのルール ゲームプレイに関連するものは同期しなければならない 殆どの物はゲームプレイに関与しない 効果音やアニメーションは殆どの場合は同期する必要がありません。もし、ネットワークを介してキャラクターが前に走って移動する場合、それぞれりマシンではその情報を元に、走るアニメーションを再生させ、そのアニメーションに合わせて靴音を鳴らすことができます...
  • Blog Post: ネットワーク その8 算術符号化圧縮

    算術符号化は解りづらく、めったに使われないツールのひとつですが、時々その威力を発揮します。例えるならネットワークデータ圧縮における変なサイズの六角レンチです。 算術符号化はクールです。なぜなら、あまり知られていないし、一見すると動かないように思えるものだからです。パーティーで女の子に好印象を持たせるのに活躍します(訳注:そうか?) 以下のデータがあったとします。 enum Species // 種類 { Camel, // ラクダ Cat, // ねこ Caterpillar, // いもむし Cheetah, // チーター Chimpanzee, // チンパンジー...
  • Blog Post: ネットワーク その7 ビットフィールドで圧縮

    ビットフィールドは古くから知られている素晴らしいデータパッキング手法です。C#プログラマーがビットフィールドを使う機会は非常に少ないですが、ネットワークパケットの圧縮にはもってこいなので、この機会に使ってみましょう。 バイトは8ビット、intは32ビット。でも、送るべきデータが8ビットや32ビットの倍数にならないときはどうします?例えば以下のようなデータを送るとします。 bool isAlive; // 生きているか? bool isFiring; // 撃っているか? enum Species // 種類 { Camel, // ラクダ Cat, // ねこ ...
  • Blog Post: ネットワーク その6 量子化で圧縮

    ビット数の少ない方が多いものより消費するスペースは小さくなります。 もしint型の値が0~100までの範囲しか取らないと判っているのなら、そのまま4バイトのint型として送るより、byte型にキャストして送ることができます。 場合によっては値が表す範囲を値をずらすことによって減らすことができます。例えば、キャラクターの高さのデータを送る必要があり、高さはcmで表されるとします。このゲーム中のキャラクターの高さの範囲は、ドワーフ(100cm)から巨人(300cm)まであります。 300という値はbyteで表現できる範囲(0-255)を超えているので、キャストすることはできません...
  • Blog Post: ネットワーク その5 圧縮

    限られたネットワーク帯域の中では、送信するデータを圧縮することは非常に重要なことです。 Zip等の一般的な圧縮アルゴリズムはネットワークゲーム向けではありません。これらの圧縮はある程度のデータ量がある場合は効率良い圧縮が期待できますが、ネットワークパケットのように小さいデータを圧縮するには不向きです。ここで必要なのは20バイトのデータを10バイトにするような圧縮方法です。 初心者がよく考える手法として、送信側で複数のパケットを続けてバイトストリームして一般的な圧縮アルゴリズムを使って圧縮し、圧縮されたデータをパケットに分割して送受信するというものがあります。確かに圧縮率は高くなるのですが...
  • Blog Post: ネットワーク その4 帯域 ボイスチャットについて

    XNAフレームワークはボイスチャットをサポートしており、ヘッドセットがある場合に自動でチャットができるようになっています。便利な機能ではありますが、使用中はより多くのネットワーク帯域が必要になることに注意が必要です。 音声データは500 B/s以下の帯域に圧縮され、ヘッドセットに向かって喋った時のみにデータ転送を行います。 デフォルトの状態では全てのプレイヤー同士で会話することができるよ���になっています。もし、ひとりが他の15人のプレイヤーに話しかけた場合、 500 * 15 = 7.3KB/s ひゃー!! 8KB/sが目標だったことを覚えていますか?これではゲームデータを送る前に殆どの帯域を使い切ってしまいます...
  • Blog Post: ネットワーク その3 帯域

    ネットワーク帯域とは、どれだけの量のデータを送受信できるかを表します。データ量が上限に近づくほどにパケットロスの量が増え、この上限を超えたデータ量を送ろうとした場合、結果的にセッションから切断されることになってしまいます。 XNA Frameworkでは帯域をバイト/秒で表します。まぎらわしいことにネットワークベンダーはビット/秒で表すのが好きで(多分、より数字を大きく見せるため)、さらにまぎらわしいことにどちらの表記もbpsやkbpsを使うことです。この表記が出てきた場合にはバイト/秒なのかビット/秒のどちらのことを表しているのか注意する必要があります。(訳注:私は個人的にバイト/秒は大文字のB...
  • Blog Post: ネットワーク その2 パケットロス

    ネットワークは信頼できません。 データーパケットを送ったときにはいろいろな事がおこります。 相手側に届くかもしれない 届かないかもしれない 届いたとしても、送った順番とは違う順番で届くかもしれない 届いたとしても、その内容が壊れてるかもしれないし、誰かによって変更されているかもしれない 4つ目はXNAフレームワークベースのゲームでは問題になりません。XNAフレームワークではLiveのライブラリを使っているので送られるパケットは全て自動的に暗号化されているので、データ自体が改ざんされたり、壊れたりということを気にする必要はありません。 2と3の問題については...
  • Blog Post: ネットワーク その1 レイテンシ

    「さて」とセイウチはいった「ネットワークの話をしましょう」 (訳注:元ネタはルイス・キャロルの セイウチと大工 から) ネットワークゲームプログラマーには以下の三つの不死の敵がいます レイテンシ データが相手に届くまでに掛かる遅延時間 パケットロス データが相手に届かない現象 帯域 送ることのできるデータ量の上限 以上の三つについて順に話しましょう。 レイテンシは物理的理由によって決まります。SFの世界では何十年もの昔に実現しているのに、物理学者は未だに光速を超える手段を発見していません。ですから、秒速30万キロ/秒を超える速度でデータを送ることができません...
  • Blog Post: ネットワークサンプルの配信

    XNA 2.0リリースと同時に配信されたネットワーク対応のスターターキットに Net Rumble がありますが、もっとシンプルなサンプルが欲しいという人の為に4つのネットワークサンプルコードが配信されました。 Network Architectures: Client/Sever XNA 2.0上でのシンプルなサーバー/クライアント型のネットワークゲームのサンプルです。このサンプルではクライアントは単に入力情報をサーバーに送るのと、レンダリングするだけの処理をしています。サーバー側はクライアントから受け取った情報を元にシミュレーションを実行し、その結果をクライアントに送るようになっています...
Page 1 of 1 (14 items)