こんにちは。開発2部でゲームアプリエンジニアを担当している日野口です。
このたび、社内での新人育成を兼ねた開発ツールの検証プロジェクトに参加いたしました。
今回はその検証で使用しました Cocos2d-x について紹介したいと思います。
なお、プログラミングに関しての内容が主になりますのでご了承ください。
今回作成したアプリ「居合一閃」のプレイ画面です。なお正式なリリースはしていません。
Cocos2d-xの特徴
Cocos2d-xは、2Dでのゲーム開発に特化したフレームワークです。
最近巷を賑わせており、特にスマートフォンアプリ開発においてはDLランキング上位のアプリの3分の1以上で使用されているほどの人気ぶり。
特徴としては以下の3つが挙げられます。
C++によるマルチプラットフォーム開発を簡単に
Cocos2d-xではプロジェクトを作成する際に、Android、iOSをはじめとする複数のプラットフォームのプロジェクトが作られ(最新版ではWindowsPhoneやLinuxなども)、それらは同じC++のソースで一括して開発することが可能です。
以前はAndroidとiOSでマルチ開発を行おうとすると面倒な環境構築が必要でしたが、Cocos2d-xがほとんど解決してくれるので工数が大幅に削減することができました。
OpenGLによる高速な描画処理
本来OpenGLを使うには専門的な知識と非常に面倒な作業が必要になるのですが、
Cocos2d-xではデフォルトでサポートされており、誰でも簡単にOpenGLのパワフルな描画を使用することができます。ただし、ハードの描画性能をフルで発揮するため、端末の発熱が激しくなりがちな点には注意が必要です。
無料!!
なんといっても無料。タダ。Free。いい響きですね。
MITライセンスに基づくライセンス表記は必要ですが、それ以外に特に制約はありません。インディーズでも商用アプリでも、誰でも手軽に使うことができます。
またCocos2d-xはオープンソースになっているので、中の構造を見ることはもちろん、自分好みに改造することも可能です。コレは特にデバッグする時にもとても嬉しい点ですね。
更にオープンソースであるおかげか、多くのミドルウェアやライブラリでCocos2d-xへの対応が積極的に行われております。
今回のプロジェクトでもキャラクタのアニメーション作成・再生にOPTPiX様のSpriteStudio、およびSSPlayerライブラリを使用させていただきました。
フレームワークとしての構造
Cocos2d-xのプログラムは、親子関係を定義付ける「ノード」を使用した「ツリー構造」を利用する形となっています。
ツリー構造とは、「親要素」を1つと「子要素」を複数持つ要素「ノード」によってデータを分類していくデータ構造の1種です。
上図の親ノードを持たない「Scene」を根(Root)ノードとして、そこから木のように枝分かれしていく形からツリー構造と呼ばれています。
図ではそれぞれのノードが3つずつ子ノードを持つような形になっていますが、Cocos2d-xのノードは子ノードの数に制限の無い「多分木」構造になっており、更に多くの子要素を持つこともできます。
このデータ構造はプログラミングにおける「オブジェクト指向」という思想との親和性がとても高く、またCocos2d-xではこのデータ構造のための「Node」のほか、各シーンを定義する「Scene」、画像を管理・表示する「Sprite」といった一通りのクラスが用意されており、とても作りやすくなっています。
注意点
非常に優秀なフレームワークであるCocos2d-xですが、使用する上で注意したい点などもいくつか存在します。
サウンド機能がイマイチ
Cocos2d-xにはBGMやSEの読み込み、再生、停止など最低限の機能は用意されていますが、BGMのフェード再生などのちょっとした機能はありません。また、BGMの多重再生については出来ない状態になっています。
フェード処理などは自分で機能を追加することで対応可能ですが、多重再生はプラットフォーム依存の処理などを改良する必要があるので相当の手間がかかります。
どうしてもクロスフェードなどの処理がしたい!という場合には、相応の追加実装作業を覚悟するか、他のサウンドライブラリを使いましょう。幸いCocos2d-xに対応しているライブラリは数多く存在しています。
バージョン間の互換が保障されない
Cocos2d-xはかなり活発にアップデートが行われており、現在でもほとんど1ヶ月に1度ほどのペースで更新されています。
このとき、旧バージョンの古い機能などが削除されてしまったり、既存関数でも引数・戻り値や内部処理が変わるなどの仕様変更が行われる場合があります。
そうなると仕様が変更された部分でビルドエラー、意図しない挙動などが発生するため、1部記述の書き直し、最悪の場合大幅な作り直し作業をすることになってしまいます。
こういう事態がマイナーバージョンアップでもたびたび発生するため、プロジェクトの途中でのCocos2d-xのバージョンアップは基本的にしないというのが通例になっています。
まとめ
最後に不満点を書き連ねてしまいましたが、Cocos2d-xは前述したように現在かなり活発にアップデートが行われており、上記の不満点が解消・安定する日も遠くはないと思います。
今回のプロジェクトで使用したバージョンは5月時点でのv3.0Final、そこから2ヶ月の間に数回の更新を重ね、7月後半にはv3.2がリリースされました。
v3.1では「Sprite3D」によって3Dにも対応するなど、機能面でも更に充実したものになっていっています。
国内でのコミュニティも盛り上がりを見せ、勢いを増しているCocos2d-x。もし2Dのアプリを開発する機会があるのであれば、1度使用してみてはいかがでしょうか。
以上。長文にわたってお付き合いいただき、ありがとうございました。