techbuzz第5回cocos2d-x勉強会 brainwars発表資料
DESCRIPTION
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料 cocos2d-x3.0 + socket.ioTRANSCRIPT
第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 5iPhone5S
の全部でテストをする。
そんな3.x系
3.x系の開発で困ったら
本家フォーラムに書くのが一番!
中の人はめちゃめちゃ優しい
• つたない英語でも汲み取ってくれる。
• むしろ日本語で返事くれる。
• 本家リリース前の段階で修正コミットを教えてくれる。
• 時々困った事ないかメールくれる。
臆せず書いちゃおう!
それがWin-Winだもの!ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
最後に
We Are Hiring!ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
Wantedlyなどから!
ありがとうございました!