jarinosuke blog

about software engineering, mostly about iOS

cocos2d入門

cocos2dというフレームワークを知っていますか?
ゲーム開発における面倒なライブラリ作成などのコストを極力抑えてくれる素晴らしいものです。
しかもオープンソースで配布されています。
iPhone用のテンプレートも最近作成されたらしく、とても便利に仕上がっています。

導入方法ですが、以下のSeasonsさんのcocos2d導入キット for Xcode プロジェクトテンプレートがとても分かりやすいので、こちらを元に興味のあるかたは頑張ってみて下さい。


ではcocos2dの表面的な特徴は大きく言えば以下の一つに集約されると思います。

ゲームを開発するための環境が既に用意されている

ゲームをイチから開発するためには、数学や物理などの専門的な知識からアニメーションやプログラミングなどの実用的な技術まで様々なスキルが必要になってきます。そのため、何か作りたいものがあってもそれに取りかかるコストがどうしても高く付いてしまっていました。
例えば衝突判定一つとっても、実装するために高校〜大学までの線形代数を復習しなくてはならないことがあったり、キャラクターを回転させながら移動させるだけなのに、まずOpenGLを学習しなければならなかったりするのです。
そういうことがあると、やはりなかなかモチベーションが保てなかったり、本来何がしたかったかがブレてきてしまい、いつの間にか違う方向に進んでいってしまうことがあったりします。

それを解決してくれるのがcocos2dなのです。ではそれらを見事にカバーする、魅力的なcocos2dの機能をいくつか挙げていきます。どうやって実装するのかなどは後日改めて書いていきます。

衝突判定

ゲームを作る上で、「プレイヤーが敵キャラに当たったどうか」「弾が敵に当たったどうか」などの当たり判定は必ず必要になってきます。
これをイチから実装しようとすると、内積と外積の求め方から始まり、全てのオブジェクトとの衝突判定をしていてもメモリが足りなくなってしまうので、「どのオブジェクトとどのオブジェクトを判定にかけたら良いのか」を最適化させる手法を学ばなくてはいけなくなったりしました。衝突判定はそれほど奥が深いものなのだと思います。詳しくは以下のサイトにとても詳しく書かれています。衝突判定

アクション

ゲームを見た目の良いものにするために、オブジェクトが元気に動き回るようにみせるのはとても重要なことですよね。でもゲームのシステム面での実装に時間がとられてしまい、ビューが疎かになってしまうことは良くあります。それに、ビューを勉強するという事はiPhoneの場合ではOpenGLの派生版OpenGLESを勉強するということであり、少しハードルが高かったりします。

パーティクルシステム

上記と同じでゲームは見た目が重要です。中身にこだわるよりも重要なのかもしれません。なぜなら楽しければ、なんでも良いのですから。
ということでパーティクルにも力を入れる必要がありますよね。パーティクルというのは、ゲーム内のエフェクトを盛り上げるために、キャラクターが着地した時に出る星のようなものだったり、敵を倒した時にでる細かな粒子みたいなものだと思ってもらって結構です。
このようなパーティクルは一つだけ表示すれば良いというものではありません。「煙」一つを表現するのに何千何万というパーティクルが必要になります。なので好き放題パーティクルを表示しているとそれだけで負荷になってしまいます。これでは本末転倒ですね、なのでパーティクルを適宣適時releaseしたりする管理システムが必要になります。
もう言いたい事はお分かりだと思いますが、これらをイチから作るのはとても骨が折れます。またパーティクル一つ一つの素材を用意するのも面倒です。

シーン移動のトランジション

いざゲーム本体の実装が出来たとして、アプリを立ち上げてすぐにそのゲームが始まるのはユーザーにとってあまり優しくは無いですよね。それにランキング機能だったりオプションも必要になるはずです。
だけれど、それらをまたイチから作るのは、とっても面倒になります。
iPhoneの場合だともう一つViewを作ってControllerなどに渡さなければいけなくなります。

物理エンジン

物理エンジンとは、ゲームという仮想の世界に重力や摩擦係数など現実に存在する様々な環境を射影した疑似空間のことを指します。なので、その中で動くキャラクター達は高い所からジャンプしても重力にしばられて自由落下運動をします。
私は実装したことは無いですが、想像しただけで大変なことは分かります。


とても大雑把に挙げましたが、上記に挙げたような機能が全てcocos2dには含まれています。
これを利用しない手は無いですよね。
ただ本家Wikiこそ、そこそこ充実しているものの、なかなか日本語のHowToサイトはあまり多く存在しません。
なので私もこのフレームワークを使わせてもらっていてばかりでは難なので、少しでも協力できれば良いなと思い、何かしらこのblogでコミットしていければ良いなと思い、今回は紹介記事を書かせていただきました。

次回からはテンプレートを用いた簡単なゲーム作成などをしていきたいと思います。