SlideShare a Scribd company logo
mixC++勉強会@Tokyo




DXライブラリで
MMO作ったよ!
自己紹介

HN:   h2so5
C++とかRubyとか色々いじってる
デザイン系の学生。

              http://h2so5.net/
              github: @h2so5
MMOっ 何?
     て

 MMD + Online → MMO
                              H2SO5




MikuMikuDance                         MikuMikuOnline



     MMDのモデルを使ったチャッ ソフト
                   ト
                http://m2op.net/
DXライブラリでMMO作ったよ!
なぜ作った?

•	ネットワークプログラミング面白そう

•	パフォーマンス重視なら C++ が活かせるかも

•	類似プロジェクトで完成しているものが少ない
クライアント編
サーバー編
デバッグ編
開発環境

  VisualStudio2010


•	MinGW+gccを使っていたが色々あって移行
•	C++11に対応してないのが残念
描画処理

      DXライブラリ
     http://homepage2.nifty.com/natupaji/DxLib/




•	ソフトウェアのコアとなるライブラリ
•	MMDモデルに対応したDirectXのラッパー
•	モデル・画像の描画をすべて丸投げ
スクリプト

V8 JavaScript Engine
       https://developers.google.com/v8/




•	UIのカスタマイズ・マクロ機能
•	チャット機能などはJavaScriptで記述
•	UIウィンドウごとに独立したContextを持つ
設定ファイル

           JSON
           http://www.json.org/




•	Web系ではおなじみのフォーマット
•	設定項目の拡張が簡単
•	パースにBoost.PropertyTreeを使用
ユーザーインター ェース
        フ


実は一番時間がかかっている

•	ほとんどフルスクラッチ
•	3 回くらい作り直したけど満足出来ていない
•	透明にして低解像度でも圧迫感を抑える
DXライブラリでMMO作ったよ!
ネッ ワーク
  ト

        Boost.Asio
    http://www.boost.org/doc/libs/release/libs/asio/




•	DXライブラリの処理とは別スレッド
•	スレッドセーフなキューを用意してメッセージ
をやりとり

           ネットワーク関係の詳細はサーバー編で
モデル座標の同期
             Server
    TCP


   Player1   Player2    Player3   Player4

             Channel1             Channel2



•	一定時間ごとに絶対座標等をサーバーに送信
•	あまり最適化はしてない
クライアント編
サーバー編
デバッグ編
開発環境

 Ubuntu/Eclipse/gcc


•	サーバーで常時稼動させるならLinuxが便利
•	VisualStudioでもビルドはできる
プロトコル
        TCPストリーム

データ     デリミタ    ヘッダー       データ      デリミタ     ヘッダー

nbyte   1byte   2byte      nbyte     1byte   2byte




        •	コマンドの区切りをデリミタ(0x7E)で判断
        •	HDLC(High-Level Data Link Control)を
         参考にしたプロトコル
        •	テキストエンコーディングはUTF-8
データ圧縮

                 lz4
       https://code.google.com/p/lz4/




•	圧縮率より速度重視のアルゴリズム
•	サイズが100byteを超えるデータに適用
•	チャッ ッセージ等に有効
     トメ
データの同期 (1)
データの同期 (2)
ュ ティ 1)
セキ リ (

    通信内容の暗号化


•	鍵交換用に 3072bit RSA
•	コマンドの暗号化に 128bit AES CFB
•	初回起動時にクライアントの公開鍵を発行
ュ ティ 2)
セキ リ (

       DoS対策


•	データ量が規定値を超えるとコマンドを無視
•	さらに超過すると一方的に切断
•	クライアント側でも制限機能がある
サーバーステータス

                      MMO
         PHP   UDP
                     Server


•	外からステータス確認できるよう急遽作った
•	パケットロス対策ため一度に数回送信
クライアント編
サーバー編
デバッグ編
デバッグ環境

      PC ×3 + VPS


•	基本的にローカルネットワークでテスト
•	Wireshark等でパケットを監視
•	低速回線のエミュレートに帯域制限ソフト
簡易プロファイラ
    *** PlayerCharacter::Impl::Update
    count:   353814
    total:   4177429ms
    average: 11.8069ms
    max:     9547ms
    min:     6ms



•	フレームレート低下の原因を調査
•	関数ごとの実行時間などを計測
•	当たり判定の処理が重いことが判明
再現性の低いバグ

  サーバーをデバッグモードで起動
         ↓
クライアントを起動しまくるスクリプトを実行
         ↓
         寝る
最後に
っ みた感想
作 て
•	通信関係は接続数が少なければ何とかなる

•	まともな UI を作るのがとにかく大変

•	DX ライブラリの仕様上、モデルデータの細か
  いリソース管理が困難

•	いい加減な仕様だと後方互換性が問題に
mixC++勉強会@Tokyo




おしまい

More Related Content

PPTX
Windows環境でのgitまとめ(2016.8)
Tadahiro Ishisaka
 
PDF
Machinationの紹介
Kazuhisa Minato
 
PPTX
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
 
PDF
オブジェクト指向エクササイズのススメ
Yoji Kanno
 
PDF
自宅で出来る!ゲームサーバの作り方
光晶 上原
 
PDF
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
PDF
ドメイン駆動設計をゲーム開発に活かす
増田 亨
 
PPTX
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
 
Windows環境でのgitまとめ(2016.8)
Tadahiro Ishisaka
 
Machinationの紹介
Kazuhisa Minato
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
 
オブジェクト指向エクササイズのススメ
Yoji Kanno
 
自宅で出来る!ゲームサーバの作り方
光晶 上原
 
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
ドメイン駆動設計をゲーム開発に活かす
増田 亨
 
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
 

What's hot (20)

PPTX
為替のTickdataをDukascopyからダウンロードする
Maho Nakata
 
PDF
私にとってのテスト
Takuto Wada
 
PPTX
プログラマが欲しい仕様書とは
Katsutoshi Makino
 
PDF
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
 
PPTX
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
 
PPTX
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
 
PPTX
決定版:サービスの盛り上がり具合をユーザの数(DAU)から読み解く方法
Daisuke Nogami
 
PDF
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
 
PDF
闇魔術を触ってみた
Satoshi Sato
 
PPTX
ゲーム開発とMVC
Takashi Komada
 
PDF
Spannerに関する技術メモ
Etsuji Nakai
 
PDF
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
 
PDF
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
infinite_loop
 
PDF
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
 
PDF
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
Unity Technologies Japan K.K.
 
PDF
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
 
PDF
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
UnityTechnologiesJapan002
 
PDF
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
KLab Inc. / Tech
 
PDF
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
PDF
Unityでオニオンアーキテクチャ
torisoup
 
為替のTickdataをDukascopyからダウンロードする
Maho Nakata
 
私にとってのテスト
Takuto Wada
 
プログラマが欲しい仕様書とは
Katsutoshi Makino
 
「ドメイン駆動設計」の複雑さに立ち向かう
増田 亨
 
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
 
決定版:サービスの盛り上がり具合をユーザの数(DAU)から読み解く方法
Daisuke Nogami
 
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
 
闇魔術を触ってみた
Satoshi Sato
 
ゲーム開発とMVC
Takashi Komada
 
Spannerに関する技術メモ
Etsuji Nakai
 
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
 
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
infinite_loop
 
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
 
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
Unity Technologies Japan K.K.
 
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
 
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
UnityTechnologiesJapan002
 
モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜
KLab Inc. / Tech
 
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
Unityでオニオンアーキテクチャ
torisoup
 
Ad

Similar to DXライブラリでMMO作ったよ! (20)

PPT
Heliumエンジンの設計と実装
DADA246
 
PPTX
C++
Mio Ku-tani
 
PDF
XNAとはなにか?XNAうれしいところ、うれしくないところ
IGDA Japan
 
PPT
Web上でのゲーム製作(Kanasan.JS LT 080114)
hoge1e3
 
PPT
DXライブラリのすゝめ
Daisuke Nikura
 
PDF
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
Kohki Miki
 
PDF
20apr2012 kernelvm7-main
Shotaro Uchida
 
PPTX
どこでも動くゲームを作るためのベタープラクティス
5mingame2
 
PPTX
Mmo game networking_1
Katsutoshi Makino
 
PDF
Linux も動く Microsoft Azure HoloLens にも対応した次世代マルチプレイミドルウェア〜モノビットエンジンクラウド〜にて採用した...
Game Tools & Middleware Forum
 
PDF
Linux も動く Microsoft Azure    HoloLens にも対応した次世代マルチプレイミドルウェア〜モノビットエンジンクラウド〜にて採...
モノビット エンジン
 
PDF
Unitynetwork
Shinsuke Sugita
 
PDF
とあるCocos2dx入門編
kumin1030
 
PDF
Flashをcocos2dxで再生
AimingStudy
 
PPTX
横浜国立大学PCサークルSCITEXの活動 in SGF2012
Tomoki Suzuki
 
PDF
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
Drecom Co., Ltd.
 
PDF
cocos2d-xにおけるBox2Dの利用方法および便利なツール
Tomoaki Shimizu
 
PDF
Boost Tour 1.53.0 merge
Akira Takahashi
 
PDF
UE4におけるレベル制作事例
エピック・ゲームズ・ジャパン Epic Games Japan
 
PDF
【CEDEC2017】新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!
モノビット エンジン
 
Heliumエンジンの設計と実装
DADA246
 
XNAとはなにか?XNAうれしいところ、うれしくないところ
IGDA Japan
 
Web上でのゲーム製作(Kanasan.JS LT 080114)
hoge1e3
 
DXライブラリのすゝめ
Daisuke Nikura
 
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
Kohki Miki
 
20apr2012 kernelvm7-main
Shotaro Uchida
 
どこでも動くゲームを作るためのベタープラクティス
5mingame2
 
Mmo game networking_1
Katsutoshi Makino
 
Linux も動く Microsoft Azure HoloLens にも対応した次世代マルチプレイミドルウェア〜モノビットエンジンクラウド〜にて採用した...
Game Tools & Middleware Forum
 
Linux も動く Microsoft Azure    HoloLens にも対応した次世代マルチプレイミドルウェア〜モノビットエンジンクラウド〜にて採...
モノビット エンジン
 
Unitynetwork
Shinsuke Sugita
 
とあるCocos2dx入門編
kumin1030
 
Flashをcocos2dxで再生
AimingStudy
 
横浜国立大学PCサークルSCITEXの活動 in SGF2012
Tomoki Suzuki
 
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
Drecom Co., Ltd.
 
cocos2d-xにおけるBox2Dの利用方法および便利なツール
Tomoaki Shimizu
 
Boost Tour 1.53.0 merge
Akira Takahashi
 
【CEDEC2017】新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!
モノビット エンジン
 
Ad

Recently uploaded (10)

PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 

DXライブラリでMMO作ったよ!