All Articles

cocos2d-x+Go+SockJSでiOSアプリ作った

遊びだけどそれなりに

Cocos2d-xの勉強をちまちまやってて何か一つアプリ作ってみないとなーって思っていたんですが、ちょうど友人と旅行に行く機会があったので、そこで使えるお遊びアプリを作ってみようということに。

作ったもの

旅行先で飲んだビールの量をカウントし、それを経験値としてレベルアップしていく、というクズ御用達のアプリです。 アイコンとスプラッシュ画像は一緒に行く方に作ってもらいました(*´∀`*)画面はこんな感じです

_人人人人人人人人人人人人_ > にじみ出る糞アプリ臭 <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

技術選定的な

ネイティブアプリ側はCocos2d-xでやるのは決めてたんですが、サーバーサイドどうしようかなーって思ってました。 いつもどおりならPHPで作ってしまうところですが、せっかくなのでこれまたちまちまやってたGoで作ろうかなと。

さらにリアルタイム関連の処理(主にWebSocketです)もv1.1.0出たしSocket.ioかなーって思ってたんですが、ちょっと問題があってSockJSを使うことに。

そんな感じで全く使ったこともなく、慣れてもいない技術セットで作ることにしました。まぁお遊びですから。

それぞれのハマったポイントやら関連してできた処理系等なんかは分割してエントリにしたいと思っていますが、 ここではさらっとツール・言語とどういうことをやったかくらいをメモ的に書いておきます。

Cocos2d-x

Unityと並んでネイティブゲーム開発におけるフレームワークの有名所。C++(他にもLua、JavaScript)で書くことが出来て、 かなりパフォーマンスが高いようです。(単純にUnityやったことがないだけなんですが)

v3.0からはC++11で書くことができて、C++の勉強も合わせてやってた手前すごく理解が深まった、というかとても書きやすくなっていました。 ただUnityに比べて日本語ドキュメントとかが少ない、書籍も少ない、ググってもv2系のエントリばかりがヒットしてしまうなど、ちょっととっつきにくいのかも…。 幸いなことに、私は社内のセミナーで導入を勉強させてもらえたので、そこはまぁ問題ではなく。あとOSSだし基本ソースコード読むしいいかな、と。

cocos2d-x: http://www.cocos2d-x.org/

Go

説明するまでもないと思いますが、Googleの出している言語。非常にスリムな言語仕様(例えば、while文がないとか)が魅力ですかね。 型を後ろにおくのはちょっとActionScriptっぽい感じがした。

素のままで書いても良かったんだけど、一応フレームワークをということでrevelを使うことに。 Railsっぽいとどこかで見かけた気がしましたが、全然そんなことはなかった。modelとかないし…。

ゴルーチンが複雑でイマイチよく理解できていない。C++のスレッドみたいなものなのかな。 余談ですが、社内のチューニングコンテストではGoを使ってた人のパフォーマンスがすごく良かったです。私は遅かったんですけどね(´;ω;`)

Go: The Go Programming Language revel: http://revel.github.io/

SockJS

node.jsでWebSocketっていえばみんなSocket.io使ってるイメージですが、SockJSにしました。 主な理由は「素のWebSocket接続のやりやすさ」。Socket.ioはブラウザでの動作に特化してて(XHR->Websocketとかありますね)、これって逆にネイティブでは使いにくいんですよね。 さらにメッセージが独自形式にエンコードされてて、それをデコードしないといけない、タイムアウトまでにpingを送り続けならければならないなど、 ネイティブでは逆に面倒でした。ついでにCocos2d-xではSocket.ioのv0.9あたりまでしかサポートされていません。

また、Go(revel)もWebSocket実装が可能なんですが、どっちもやろうとすると破綻しそうだったのでこっちは諦め。いずれまた別の機会にやってみる。

というわけで、素のWebSocket接続がやりやすいSockJSを使うことにしました。(決してSocket.ioがダメだってことはなく、ケースバイケースってことで) そのあたりは別エントリで。

SockJS: https://github.com/sockjs

まとめ

それぞれのまとめは別エントリにするとして、諸々の理由うによりソースコードは公開してません。 ちょっと「見せられないよ!」のレベルでソースコードがヒドいのもあるので。 とはいえ、何かしらを作ったということは大きな経験になったので、ノウハウはしっかりたまったと思います。

ポイントポイントのコードなんかは備忘録的に書きたいと思います。 沖縄からは以上です。

あと念のため、決して飲酒を助長するために作っているわけじゃないですからね!遊びだよ!