6月20日に、東京で行われたcocos2dxの勉強会へ参加をしてきました。 今回は、この勉強会についてブログに書いていきたいと思います。
脳トレアプリ「BrainWars」~リアルタイム対戦を支える技術~
オンライン対戦型のゲーム「BrainWars」を作成されている高場さんと工藤さんのお話です。
「BrainWars」を作成しているトランスリミット社は今年の1月に出来た新しい会社です。 子供から大人、また世界で遊べるゲームを作成しているとのこと。第一作目が「BrainWars」。 ソーシャルメディアでの広く拡散されている。 AppBankでも取り上げられた。
技術的な話 - リアルタイム対戦
「BrainWars」の最大の特徴は、オンラインで対戦ができること。 その際に「Socket.IO」という技術を利用している。 これを利用すればあらゆるデバイスで双方向の通信が可能になる。
cocos2dxは3.0を利用している。 アルファバージョンだったので、エラーがたくさん出て大変困ったそうです。
サーバーでは「Node.js」「Ruby on Rails」を利用している。 通信では「Socket.IO」を利用しているが、サーバーサイドもちろん実装が必要。
デモ画面
画面上で入力した結果をサーバーがそのまま返すデモを見せていただきました。
気をつけること
通信の際の注意点は以下のような形です。
websocketについて以下を参考に。 cocos2d-xにおけるWebSocketクラス | チラ裏開発メモ
ゲームの対戦方法の実装
ランダム対戦:通常の対戦方法。 アプリに接続しているユーザーと対戦をします。
もし、対戦相手がいなかった場合はどうするか。 その場合は、APサーバーに保管されているゲームのログを利用します。 今までユーザーが行ったゲームのログは全てサーバーに保管されています。これを利用して対戦を行います。
相手を指定した対戦 友達など、特定の人と対戦をする場合です。
もし、リクエスト相手がいなかった(ネットが繋がっていない、iPhoneの近くいない)場合はどうするか。 この場合も、先ほどと同じログを利用します。
ゲームをしている途中に、リクエスト相手と接続ができた場合 ログを使って対戦をしている途中に、リクエストに気づき相手がゲームに接続した場合はどう対処するか? この場合はディレイモードを利用します。
これもログを利用しています。
シェア対戦 ソーシャルメディアに「URLスキーム」「対戦ログ」のリンクを貼り付けることで、リンクを押すだけでその人と対戦をすることができます。
cocos2dxについて
3.xは、プロジェクト自身のバグが多くてとても困った。 SoketIOはデバイスやbit数によって挙動が違う場合があり、この部分をテストする必要がある。 何かわからないことがあれば、本家のフォーラムに書くのが一番早い。中の人はとてもやさしい。
質問事項
Q、「脳トレ」の商標は大丈夫だったのか? A、一般名詞なので大丈夫。
Q、収益の部分はどうなのか? A、今の所は儲かっていない。
Q、SocketIOについて SocketIOは通信手段なので、サーバーでの実装が必要。 また、人が増えるとスケールアップが必要になってくる。
【参考リンク集】
- Socket.IO
- cocos2d-x: SocketIO Class Reference
- cocos2d-xにおけるWebSocketクラス | チラ裏開発メモ
- 知っておくとiPhoneをもっと便利に使える「URLスキーム」とは? - たのしいiPhone! AppBank
Sprite3D
アカツキ社 河野さん。 cocos2dx3.1から実装された「Sprite3D」について。
Sprtie3Dとは
通常のSpriteクラスと同じように3Dモデルを操作することができる。
フォーマットは[OBJ]を利用します。 【実装例】 [c]
//3Dモデルデータを読み込む auto sprite = Sprite3D::create("Sprite3DTest/boss1.obj"); sprite->setScale(3.f);
//モデルのテクスチャを読み込む sprite->setTexture("Sprite3DTest/boss.png");
addChild( sprite );
[/c]
ジェダーの拡張
トゥーンレンダリングみたいなことができる。
現在出来ないこと
- タッチイベント(getBoundBoc()で正確な数値が取得できない)
- 物理演算
- アニメーション(これは、最新版で3.2で実装されたが、改善するべき点が多い)
サウザンドメモリーズについて
アカツキ社の「サウザンドメモリーズ」は、cocos2dx製ではありません。 でも、なぜか本家に載っているので、社内でも困惑しているとのこと。 Cocos2d-x Based Janpanese RPG Thousand Memories Coming in Town This Summer | Cocos2d-x
ただ、cocos2dxで現在開発はしているとのことです。
LT(5分)
Cocos Code IDEについて 清水さん
Code Editor | Cocos2d-x Cocos Code IDEは[cocos2dx]用の専用エディタです。 LuaとかJavaScriptで利用する。 [特徴] Eclipseよりもビルド等が早い。 ブレイクポイントが利用できる。 エディタ内で変数の調整ができる。
appC cloud SDK 糸賀さん
1つのSDKで、「広告」「アプリ内課金」「プッシュ通知」などが実装できるサービスで、cocos2dxでも実装が可能になった。 これを利用すれば、作業工数の短縮ができ、スムーズな開発をすることができる。
cocos2d-x javascriptのススメ 藤原さん
ソースコードはバイナリーに変換するツールを利用すれば外にバレることはない。 「広告」「SNS」などはネイティブ言語(Objective-c,Jave)で書いて、それをJavaScriptから呼び出す。 その際は、独自に試した所「localStorage]を利用する。(ただこの方法では戻り値がもらえない) そこで「EasyJSB-for-cocos2dx」を利用した。
cocosBuilderを使ったアニメーションのデモ。 シューティングゲームのデモ。(専用のコントローラー)で操作ができる。
Live2Dとcocos2d-xを組み合わせたアプリ開発について - 嶋崎さん
Live2Dとは、2次元の絵を3Dのように動かすことができる。 制作の手順は上記のような流れです。
前回の勉強会で「Soft Physics - Cocos2dx」を見てcocos2dxを使ってみようとした。 ただ、完成しなかったとのこと。 来月の勉強会までには完成しているかも。
個人的感想
全体を通して、新しい目にすることばかりでしたので非常に勉強になりました。 勉強会を開催いただいた主催者の方、また登壇者の方ありがとうございます。
BrainWars
アプリのデザインが「フラットデザイン」っぽくて色合いがとても綺麗です。 私はサーバーについては知識がゼロなので、今回の話を聞いてすぐに導入するということはありませんが、cocos2dxではSocketIO用のクラスもあるので簡単に実装ができそうです。 もし、ネットを介して何かゲームを作るいには、サーバーで処理ができるように勉強をしないといけないですね。
Sprite3D
Spriteクラスのように位置の指定や、アクションが利用できるのはとてもわかりやすいので良いなと感じましたが、河野さんもおっしゃってましたが、現状ではcocos2dxを使うよりUnityを利用した方がいい感じです。 今後cocos2dxがどのようにしていくかを見る必要があると思います。 個人的には、3Dに手を出さずに2Dにこだわって作って欲しいのですが、おそらく競合のUnityとの関係で「cocos2dxも3Dもできます」のようにアピールが必要なのではないのかなと思います。
LT
LuaやJavascripで何かどのように変わるかがよく分からないので手を出しにくい部分なのですが、ゲームとしてもしっかりとしたものが作れる印象です。 また、エディタに関しても、今までは使わずに開発をしているのですが、色々見るに、何か試したほうがよいのかなと感じます。 この辺りの日本語のドキュメントが少ないのも手が出しづらい理由ですかね。