2012年12月4日火曜日

cocos2d-xとはなんじゃらほい?

本エントリーはAndroid Advent Calendar4日目「裏」を担当します@f_megmeg5です。
本日12/4の「表」エントリーは@bina1204さんによる「DevicePolicyManager について」ですので、合わせてそちらも御覧ください。

さて、私はiPhoneアプリの開発経験もあり、iPhone関連の勉強会にも参加します。
iPhoneなら書籍が幾つか発売されているのに、Androidもその恩恵を受けられるのにあまり知名度がない技術としてcocos2dが挙げられるのではないでしょうか。
私の友人達はcocos2d for iPhoneをバリバリ使っているし、2Dゲームを作りやすくなるのだから知っていた方が良いと思いますので、今回はcocos2dの中でもcocos2d-xについて紹介をしていきたいと思います。
ほら、ゲームの中に広告組み込むとお金も稼ぎやすいとかなんとか言いますし。
たぶん。
また、cocos2d for iPhoneを使ったゲームを開発されている@ajinotatakiさんのアプリでElectroMasterHungryMasterがあります。
古き良きレトロゲームの雰囲気があり、ゲームとして面白い部分が凝縮されているのでとてもハマっていました。
HungryMasterに関しては世界ランキングで一時期1位取っていましたし。
これらのゲームはSpriteの数もかなり多く使用されているゲームの一つです。
そのようなSpriteの管理等も出来るため、cocos2dを使用して2Dゲームを開発していくのが効率が良いでしょう。
開発するには楽に越したことはありません。
少なくとも私は楽したいです。

そんなこんなで、Androidでも使用できるcocos2d-xが大雑把にでも知って頂ければ、Android開発者でもcocos2d使いが増えてきて楽しくなるのではないかと妄想しています。
ちなみにJavaScriptを使用してcocos2dを動かす「cocos2d javascript bindings」なるものもあるらしいです。
派生系も多いですので、自分の開発しやすい言語で開発が行えるような環境にあるのもcocos2dの魅力の一つです。

技術的なことは本当にお触りしかやっていないのですが、これから少しずつ見ていく予定ですのであしからず。
Macでの環境構築に関してはこの記事この記事を参照してください。


cocos2d-xとは


cocos2d for iPhoneを継承してC/C++で記述していくゲームエンジンです。
オープンソースですので、中は見放題ですしゃっほい!
ちなみにこちらが公式サイトです。
cocos2d-xの開発は中国で法人化して行っているとのことですので、力の入れようがわかります。
ソースをC/C++で記載していきますので、例えばiPhoneでも同じソースで動けます。
一つのソースで様々な環境で動く、これがcocos2d-xのクロスプラットフォームとしての最大の強みです。
やはり、iPhoneとAndroidの両方でリリースを行いたいと考えられている方も多いですので、その場合cocos2d-xですとiPhoneとAndroidのそれぞれで開発をしていくよりもcocos2d-xで書いた方が時間短縮ができると思いますので、両方でリリースを考えられている方には良いゲームエンジンです。
実際にURARA-WORKS Co., Ltd.さんの腐ったミカン鉄球ヘブン等はcocos2d-xで開発されているようです。
また、他の開発者の方もcocos2d-xを使用してマルチプラットフォームでリリースできるように開発をされていますので、少しずつですが普及し始めているゲームエンジンと言えるのではないでしょうか。


どうしてcocos2d-xなの?


Androidでcocos2dを行うためのゲームエンジンは実は他にもあります
それが「cocos2d-android」と「cocos2d-android-1」というものがあります。
しかもこれ、Javaで書けるのです。
それならこっちの方が良いやーんとなりますが、そうは問屋が卸しません。
これらの更新は1年以上止まっているのです。
仮にcocos2d for  iPhoneの更新が止まっていて、それに追いついた状態で止まっているのならまだマシも、cocos2d for iPhoneは日々更新されています。
cocos2d for iPhoneからどんどん引き離されているものを使用するのも嫌ですし、バグ対応もされていないので使うのも怖いのです。
ですが、cocos2d-xでしたら、こちらも現在も更新がされ続けられていますので、Androidでcocos2dを使う場合は、cocos2d-xを使う方が良いのではないかという流れになりつつあります。
このような見解はcocos2dのエバンジェリストである@Seasonsさんも仰っています。


cocos2d-xを実際に使ってみて


私はcocos2d for iPhoneをあまりやったことがないまま、cocos2d-xに取り組みました。
そもそもC/C++もやったことありませんですし、cocos2dのご作法もなんとなーくしかわからないままやっていましたら、死にました。
ええ、どうしてこうなったというぐらいさっぱりわからなくなりました。
とりあえずはこちらのサンプルを見ながらぽちぽち写経を行なっていました。
このサンプルですとAndroidでできますし。
それで一通り動かしてみてわからないままでしたが、ゲームとして形ができていくのは面白かったです。
ただ、スケールの問題がありますので、それは別途対応を行わなければならないのがちょっと面倒かなという部分はありました。
理解できていないところがほとんどですので、もっと勉強していきたい分野です。
わからなければ、頼り甲斐のある方が周りにいらっしゃいますし!


cocos2d-xをこれからやる際のアドバイスとして


もし、MacがあるのならEclipseで開発するよりもXcodeやAppCodeでの開発の方がいいと思います。
AppCodeならC++の補完も入っているとのことですし、両方共書きやすいですし。
iOSのシミュレータでも動きます。
Androidの爆速エミュレータではどのような挙動になるのかは確認していないですが、Xcodeで開発したときはEclipseよりも書きやすくて感動した記憶があります。
私の環境が悪いだけかもしれませんが…。
また、Xcodeも無料で落とせますし、シミュレータだけで挙動を確認したいのなら、Appleへのお布施も必要ではありません。
Xcodeでcocos2dのお勉強をしてからcocos2d-xを組んだ方が理解しやすいと思います。
私は逆でしたので死にましたので、本当にこの順序をオススメします。
そうしないと私と同じ轍を踏んでしまいます。
また、Dashでもcocos2dやcocos2d-x等のリファレンスの参照ができますので、入れるのをオススメします。
もちろんAndroidも参照できますので、ぜひぜひ。


結論


MacがあるならXcodeを落としてcocos2dやると幸せになれるよ!
AndroidのAdventCalendarなのに、この結論は酷いです。
ですが、今までの経験上このような結論となってしまいますので、仕方がないのかなとなっています。


cocos2d関連で…


cocos2d関連のコミュニティはいくつかSNS状にあります。
Twitter

facebook
このようなコミュニティもありますので、フォローをして情報を追うと色々面白い情報が流れてきます。
cocos2dに関してはこれらのコミュニティ以外でも、勉強会等でもよく話題に上がりますし、勉強会でも実際に使われている方もいらっしゃるので、そのような方にお話を伺うのも面白いと思います。

また、 cocos2d日本語の書籍も幾つか出ています。
他にも幾つかありますが、代表的なのはこの2冊だと思います。
前者は入門としてオススメです。
後者は中級以降でオススメです。

ちなみに本日ですが、GREE社でcocos2dの勉強会が行われます。
こちらはまだ空きがありますので、興味のある方は是非いらっしゃってください。
冒頭で触れました「cocos2d javascript bindings」についての話もありますので、JavaScript使いの方は是非いらしてください!
また、ハッシュタグは#cocos2d_devcon3_jpですので、濃いー話を聞きにきたいけど、来れそうにない方はこちらのハッシュタグを追うのも良いかと思います。


最後に


あまりAndroid界隈でcocos2dの話が出てこないこととiPhone界隈では割りと話されていることですので、それなら少しでもcocos2dを知るきっかけになれば良いかなと思い今回はAdventCalendarを書かせていただきました。
最終的にはiPhoneやAndroid等関係なく、cocos2dを扱うということで色んな方とお話をしたり、技術的意見交換の場ができると面白いのかなとも思いました。
やはり色んな方とお話したりするのは楽しいですし、面白いですからね!

私はiPhoneアプリの開発から離れてAndroidアプリの開発を行なっていました。
それで周りの方々がcocos2dを扱っている時に「Androidでもできるといいのに」と思っていました。
そういう思いがあった時に@Seasonsさんからcocos2d-xの情報が流れてきた時に、
「これだ!」
となり、早速環境構築や弄ってみたことを勉強会で発表したりしました。
最近はあまり触れていませんが、もう少しcocos2dの勉強をしたらcocos2d-xの勉強も再会する予定です。
そうしましたら、また技術的内容をブログに公開していきたいと思っています。

最後になりましたが、「今ならこういうこともできるのかー」という新しいことを知れるとワクワクしませんか?
私はワクワクします。
そしてその「新しいこと」に触れてうっひょうと楽しくなることが、好きです。
よくわからなくて、てんやわんやしていてもやっぱり楽しいものは楽しいなとなります。
それが私がプログラムをやっていける気持の根源なのだと思います。
仕事では病みまして、休職からの退職コンボを決めかねない状況ですが、本職ではなくても細々と続けていきそうな気はします。
どうなるんだろう、私の人生。


さて、明日は表は@u_s_kさんによるエントリーと裏は@kabayanさんによるエントリーですので、お二方のエントリーも是非ご覧ください♪