More Related Content
Similar to DXライブラリでMMO作ったよ!
Similar to DXライブラリでMMO作ったよ! (20)
DXライブラリでMMO作ったよ!
- 2. 自己紹介
HN: h2so5
C++とかRubyとか色々いじってる
デザイン系の学生。
http://h2so5.net/
github: @h2so5
- 3. MMOっ 何?
て
MMD + Online → MMO
H2SO5
MikuMikuDance MikuMikuOnline
MMDのモデルを使ったチャッ ソフト
ト
http://m2op.net/
- 8. 描画処理
DXライブラリ
http://homepage2.nifty.com/natupaji/DxLib/
• ソフトウェアのコアとなるライブラリ
• MMDモデルに対応したDirectXのラッパー
• モデル・画像の描画をすべて丸投げ
- 9. スクリプト
V8 JavaScript Engine
https://developers.google.com/v8/
• UIのカスタマイズ・マクロ機能
• チャット機能などはJavaScriptで記述
• UIウィンドウごとに独立したContextを持つ
- 10. 設定ファイル
JSON
http://www.json.org/
• Web系ではおなじみのフォーマット
• 設定項目の拡張が簡単
• パースにBoost.PropertyTreeを使用
- 11. ユーザーインター ェース
フ
実は一番時間がかかっている
• ほとんどフルスクラッチ
• 3 回くらい作り直したけど満足出来ていない
• 透明にして低解像度でも圧迫感を抑える
- 13. ネッ ワーク
ト
Boost.Asio
http://www.boost.org/doc/libs/release/libs/asio/
• DXライブラリの処理とは別スレッド
• スレッドセーフなキューを用意してメッセージ
をやりとり
ネットワーク関係の詳細はサーバー編で
- 14. モデル座標の同期
Server
TCP
Player1 Player2 Player3 Player4
Channel1 Channel2
• 一定時間ごとに絶対座標等をサーバーに送信
• あまり最適化はしてない
- 17. プロトコル
TCPストリーム
データ デリミタ ヘッダー データ デリミタ ヘッダー
nbyte 1byte 2byte nbyte 1byte 2byte
• コマンドの区切りをデリミタ(0x7E)で判断
• HDLC(High-Level Data Link Control)を
参考にしたプロトコル
• テキストエンコーディングはUTF-8
- 18. データ圧縮
lz4
https://code.google.com/p/lz4/
• 圧縮率より速度重視のアルゴリズム
• サイズが100byteを超えるデータに適用
• チャッ ッセージ等に有効
トメ
- 21. ュ ティ 1)
セキ リ (
通信内容の暗号化
• 鍵交換用に 3072bit RSA
• コマンドの暗号化に 128bit AES CFB
• 初回起動時にクライアントの公開鍵を発行
- 22. ュ ティ 2)
セキ リ (
DoS対策
• データ量が規定値を超えるとコマンドを無視
• さらに超過すると一方的に切断
• クライアント側でも制限機能がある
- 23. サーバーステータス
MMO
PHP UDP
Server
• 外からステータス確認できるよう急遽作った
• パケットロス対策ため一度に数回送信
- 25. デバッグ環境
PC ×3 + VPS
• 基本的にローカルネットワークでテスト
• Wireshark等でパケットを監視
• 低速回線のエミュレートに帯域制限ソフト
- 26. 簡易プロファイラ
*** PlayerCharacter::Impl::Update
count: 353814
total: 4177429ms
average: 11.8069ms
max: 9547ms
min: 6ms
• フレームレート低下の原因を調査
• 関数ごとの実行時間などを計測
• 当たり判定の処理が重いことが判明