第5回cocos2d-x勉強会資料
株式会社トランスリミット
工藤  琢磨
自己紹介
氏名:  工藤  琢磨  (26)
           takuma.kudo.7
略歴
06年  東京ゲームデザイナー学院
08年  タイトー
10年  コミュニティファクトリー
12年  ジークレスト(CAアメリカ)
14年  トランスリミット
BrainWarsとは?
脳トレ×リアルタイム対戦
子供から大人まで、
国境を越えて熱狂できる!
iOS版配信中です(ゝω・)
というわけで
特徴は
リアルタイム対戦!
本日の内容
•    リアルタイム対戦のための通信技術
•    リアルタイム対戦の工夫
•    その他ハマった点などなど
BrainWarsはcocos2d-x3.0で作られてます!
Socket.IO
リアルタイム対戦の通信技術
Socket.IOとは
•    あらゆるデバイス間で双方向通信を実現
することを目的とした技術。
•    Websocket、Pollingなどを自動で判定、
選択してくれる。
このSocket.IO
Cocos2d-x  3.0から使えます!
※  Websocketなら2.x系でもつかえます
実装デモ
知らぬ間にQiitaにまとめが!
「Qiita  BrainWars」で検索!
めっちゃ簡単!
ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
気をつけたい点・その他
•    遅延や接続切れは起こるもの
 →  こまめに同期タイミングを作ってる。
•    Spine/Json.hはイケてない(エンコード出来な
かったり処理重かったり)
   →  rapidjsonを使ってます。
•    cocos側はwebsocketが固定で採用される
•    データが大量の場合分割されて送信されてるみた
い(2KB)
リアルタイム対戦の工夫
BrainWarsでの対戦パターン
•  ランダム対戦
•  相手を指定した対戦
•  シェアリンクからの対戦
•  などなど
ランダム対戦
ソケットサーバー
(Node.js)
ホスト
(先に繋いだユーザ)
ゲスト
後に繋いだユーザ
APサーバー
(Ruby  on  Rails)
問題の取得
結果の送信
など
待機中が2人になるとマッチング
バトルコードを発行して対戦を識別
データの受け渡し
接続切れの監視
問題点
ホスト
対戦相手が来ない・・・
相手がいなかったらどうしよう
((((;゚Д゚))))
・・・
ログで解決
ソケットサーバー
(Node.js)
ホスト
ゴースト
APサーバー
(Ruby  on  Rails)
②ゴーストデータ
の要求
①タイムアウト
で切断
過去の対戦ログ
Redis
対戦した時のログを保持してる
相手を指定した対戦
ソケットサーバー
(Node.js)
ホスト ゲスト
APサーバー
(Ruby  on  Rails)
問題の取得
結果の送信
など データの受け渡し
接続の管理
Push通知
Push起動で
そのまま対戦へ
バトルコードが入ってる
問題点
ホスト
Push通知
・・・ ・・・
相手が応えなかったらどうしよう
((((;゚Д゚))))
これもログで解決
APサーバー
(Ruby  on  Rails)
ホスト ゲスト
先にプレイして
ログを残しておく 後からいつでも
ログと戦える
ゴースト
Redis
問題点その2
ホスト ゲスト
先にプレイ中 あ、通知来てる
ログが残る前に来たらどうしよ
((((;゚Д゚))))
・・・
APサーバー
(Ruby  on  Rails)
ソケット開きっぱで解決
ソケットサーバー
(Node.js)
ホスト ゲスト
ソケットを開いたまま
先にプレイする データの受け渡し
接続の管理
Push通知
ホストのプレイログを
ソケット経由で受け取る
シェア対戦
APサーバー
(Ruby  on  Rails)
ホスト ゲスト
先にプレイして
ログを残しておく
リンクからアプリを起動
いつでも挑戦できる
ゴースト
Redis
ソーシャルにシェア
Cocos2d-x  3.0でハマった点
Beta版から開発してたので
本家バグがやたら多かった
(ヽ´ω`)
Beta版なんだから当たり前やん!
ただ特に気をつけたい点(iOS)
32/64bitで実装が分かれてる
どっちかが動かないとかよくある
なので
シュミレータ(32bit,64bit)
iPhone4  or  5
iPhone5S
  の全部でテストをする。
そんな3.x系
3.x系の開発で困ったら
本家フォーラムに書くのが一番!
中の人はめちゃめちゃ優しい
•  つたない英語でも汲み取ってくれる。
•  むしろ日本語で返事くれる。
•  本家リリース前の段階で修正コミットを
教えてくれる。
•  時々困った事ないかメールくれる。
臆せず書いちゃおう!
それがWin-Winだもの!
ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
最後に
We  Are  Hiring!
ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
Wantedlyなどから!
ありがとうございました!

TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料