連載
» 2013年02月25日 18時00分 UPDATE

C++でクロスプラットフォームを実現するCocos2dx入門(前編):Cocos2dxでiOS/Androidの2Dゲーム開発を始めるには (1/3)

スマホ向けゲームアプリ開発フレームワークの概要や使い方を解説。JavaScriptやHTML5にも対応しています。

[森本数馬,グリー]

Cocos2dxとは

 「Cocos2dx」とは、Zhe Wang氏によって開発され、彼を中心としてメンテナンスが行われている、オープンソースかつ無料の2Dゲームエンジンです。ライセンスはMITで配布されています。2013年1月時点では2.1.0が最新の安定バージョンとしてリリースされています。

cocos2dx1.jpg Cocos2dxのプロジェクトページ

あの「Cocos2d for iPhone」のC++版

 もともと、iPhoneのゲーム開発向けに開発されている「Cocos2d for iPhone」というゲームエンジンがありますが、こちらはiPhone向けということでObjective-Cで記述されています。

 Cocos2dxはCocos2d for iPhoneをC++ベースで移植したものです。

 Cocos2dxを使うことにより、アプリ開発者は容易にpngなどの画像データからスプライト(背景と独立して動作するオブジェクトのようなもの)を生成し、ゲームの中でそれらを動作させたり、衝突検出させることが可能です。また、テンプレートベースでゲームを作ることができるので、開発コストを大幅に削減できます。

 Cocos2d for iPhoneについて詳しく知りたい方は、少し古いですが@IT記事『「cocos2d」を使ってiPhoneゲームを作ってみよう』をご覧ください。

一番の特徴はC++でのクロスプラットフォーム

 Cocos2dxではゲーム開発に必要なAPIが数多く提供されているので、先ほど触れたようにゲーム開発が容易に行えるようになるのですが、それ以外の優れた特徴の1つに、クロスプラットフォームであることが挙げられます。

 具体的に言うと、C++で実装されたCocos2dxApplicationCodeがiOSでもAndroidでも(その他、Windows 8、Blackberryなどでも)動作します。

cocos2dx2.png クロスプラットフォーム

 折角開発したアプリが、手を加えずとも複数のプラットフォームで動作してくれるのは、開発者としては非常にありがたいことだと思います。

 また、筆者のようにObjective-Cに不慣れな場合でも、Cocos2dxであればC++で容易にアプリ開発が行えます。

コミュニティも充実

 Cocos2dxのプロジェクトページには、コミュニティも存在し、Q&A、バグフィックス、各種拡張機能などのやりとりが非常に活発に行われています。

cocos2dx3.jpg Cocos2dxのプロジェクトページにあるフォーラムの例

 実装方法が分からない場合などは、ここを調べるだけでかなり参考になる情報が見つかることもあります。

 とは言っても、プロジェクトページが英語なので心配される方もいるかもしれませんが、以下のように日本でも@Seasonsさんが管理されているCocos2d関連のコミュニティがあったり、Cocos2dx関連の開発手法を丁寧に説明してくれているページがあったりするので、それほど心配する必要もありません。

 また、後ほど触れますが、Cocos2dxはここで軽く触れた内容以外にも特徴があり、個人的な意見ですが、今後2D系のゲームエンジンを使おうと考えているのであれば、Cocos2dxを選択肢の1つとして考えるのが良いのではないかと思っています。

なぜiOSでもAndroidでも動くの??

 先ほど、iOSでもAndroidでも同一のコードが動作すると紹介しましたが、 ここではどのように異なるプラットフォーム上での動作を実現しているかについて、一部のソースコードを見つつ説明していきます。

 Cocos2dxのダウンロードページから、Cocos2dxのソースコードを取得して展開してみると、以下のようなディレクトリ構成になっています。

cocos2dx4.jpg

 「cocos2dx」ディレクトリ以下に、Cocos2dxが提供するAPI群の実装コードが入っています。「cocos2dx」ディレクトリには「platform」ディレクトリがありますが、その中はこんな感じです。

cocos2dx5.jpg

 一部C++のコードが入っており、それ以外は「android」「ios」といった感じでプラットフォーム名でディレクトリが、さらに掘られています。

 例えば、「ios」ディレクトリの中身を見てみましょう。

cocos2dx6.jpg

 iPhoneアプリ開発者であればなじみの深いObjective-Cのコードが入っていますね。

 同様にandroidディレクトリの中身を見てみましょう。こちらはちょっと深いですが。

cocos2dx7.jpg

 ご想像通り、「jni」以下を見ていくと、C++で記述されたJNIのコードが、「java」以下を見ていくとJavaのコードが入っています。

 Cocos2dxはその大部分がC++で記述されていますが、デバイスからのEvent入力であったり、Windowの取得だったり、Audio再生機能であったり、アプリの起動部分など必要最低限の部分をプラットフォーム依存の言語で記述し、プラットフォームとのインターフェイスを取っているのです

 コアとなる部分がC++で記述されていますが、C++は各プラットフォームに適した環境でビルドできれば、基本的にはどのようなプラットフォームでも動作するので、クロスプラットフォームが実現できるわけです。

cocos2dx8.png Cocos2dxのスタック

 上記のマルチプラットフォーム実現方法をより深く理解するためには、Audio再生機能を提供しているCocosDenshion辺りが非常に良い参考になると思いますので、もしもより深く知りたい場合は一例として実際に見てみることをお勧めします。

 Audio再生機能は「CocosDenshion」ディレクトリ以下に格納されています

Cocos2dxを実際に動かしてみよう

 ここからは、実際にAndroidアプリとiOSアプリを開発し、動かしてみましょう。基本的な開発スタイルとしては、Android用はEclipseを利用し、iOS用はXcodeで開発します。

 詳細な開発手順については、以下のように、丁寧な説明が載っているサイトがすでに複数存在しますが、本記事だけでも完結できるよう、一応記載します。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。