初めてiPhoneのゲームアプリを作成した時の全工程

私が、初めてAppStore用のゲームアプリを公開した時の、作業工程をブログにまとめました。初めてのプログラミングをしたということもあり、結構な時間がかかってしまいましたが、その中で今後アプリを作る際にやっておきたいことが見えてきました。ぜひ、これからアプリを開発したいと思っている方に見て欲しいです。

作成したアプリは【BOOKQUEST】というアクションRPGゲームです。 BOOK QUEST App
カテゴリ: ゲーム
価格: 無料

工程

BOOKQUESTの工程の日数は約1年半です。

1ヶ月〜3ヶ月(2011年10月~12月)

過去のプロジェクトファイルを見返してみると、この間に行なっていることはcocos2dの勉強とドット絵の勉強。あとは、アクションRPGの画面移動のシステムを考えることです。

プログラミング

私は、プログラミング初心者(HTML+CSSはちょっとやってました)なので、xcodeobjective-c、並びにcocos2dについてどういったものなのかを勉強しました。 とりあえず、めぼしい本を買って、例題を実際に入力をして、どうなるかを繰り返しました。

cocos2dで作る iPhone&iPadゲームプログラミングcocos2dで作る iPhone&iPadゲームプログラミング
Steffen Itterheim,畑 圭輔,坂本 一樹,加藤 寛人,高丘 知央,株式会社 クイープ

インプレスジャパン
売り上げランキング : 49692

Amazonで詳しく見る
cocos2d for iPhoneレッスンノートcocos2d for iPhoneレッスンノート
加藤寛人,佐藤伸吾

ラトルズ
売り上げランキング : 183535

Amazonで詳しく見る

ドット絵

ドット絵は好きですが、実際にそれを使い絵を書いたことはありません。これも、本を参考に、例文を実際に描いていました。ソフトは、どのようなソフトがあるのかわからずに、Photoshopを利用。Photoshopのりよう方法もこれを気に勉強をしました。

ドット絵プロフェッショナルテクニック―ドット打ちからアニメーションまで (Game developer books)ドット絵プロフェッショナルテクニック―ドット打ちからアニメーションまで (Game developer books)
高野 隼人

秀和システム
売り上げランキング : 17783

Amazonで詳しく見る
ドット絵職人―すべてのパソコンに入っている「ペイント」ツールでつくる (MdN books)ドット絵職人―すべてのパソコンに入っている「ペイント」ツールでつくる (MdN books)
Suguru.T

エムディエヌコーポレーション
売り上げランキング : 146746

Amazonで詳しく見る

ゲームシステム

ゼルダの伝説聖剣伝説のような、アクションRPGを作りたいということは決まってました。 では、それには何が必要かを1つずつ考えて、それをプログラムをしていくか? この時期は、TileMapでフィールドを作成する、マップの移動を考えました。

その際に、すごく参考にしたものが、以前に参加した「西東京iPhoneDev勉強会」の時に@ajinotataki@さんが発表された際に使われた、サンプルコードです。 これを参考に、タイルマップとZ値の使い方などを参考にさせてもらいました。

xionchannel@software: 西東京iPhoneDev勉強会第5回に参加しました

4ヶ月〜6ヶ月(2012年1月~3月)

この時期は、キャラクターの作成、敵キャラの作成を行なっていました。 実際にゲームに出てこない敵キャラを含め、結構な数のキャラクターを書いていました。 最低限、「上、下、右、左」の歩くアニメーションを作成。その他、攻撃のアクションがあるものに関しては、同じように4方向のアニメーションをそれぞれ作成しています。 主人公に関しても、現在の黄色頭に青色の服のモノはかなり書き直しています。

最終的にはver5くらいまであります。最初に作った奴は、今見たらめっちゃ酷いやつでした。 初期の敵キャラの一つ Slime blue 主人公のバージョン1 Player

7ヶ月〜9ヶ月(2012年4月~6月)

この時期は、ゲームシステムの作成。 画面の遷移、敵の攻撃パターン、ダンジョンの仕掛け、主人公のアクション(ブーメランなど)、その他色々なモノを作っていました。

10ヶ月〜12ヶ月(2012年7月~9月)

この時期は、画像のRetina対応、フィールド、ダンジョンの作成。サブウインドウの作成など。 ここで、大体のゲームの全体像は完成しています。

一番問題だったのが、Retinaの対応。これまでは、実機・シミュレーター共にRetinaを対応させずにずーっとテストをしていたのですが、画像の作成から、Retinaに合わせた画面の再構築などが、とても大変でした。今後は、Retinaを前提と作らないと、かなりの時間が無駄になると感じました。

フィールドとダンジョンも、結構いきあたりばったりでマップの作成と仕掛けを配置していったのが、反省点です。 前もってデザインをして組み立てていかないと、ゲームの整合性が取れにくくなります。

12ヶ月〜15ヶ月(2012年9月~12月)

この時期は、音楽と効果音の作成。 音楽なんか、中学校で音楽の授業を受けて以来なので、まったくわからなかったです。 最初はGarageBandを使って、色々触っていたのですが、途中からLogicProを購入して、こちらで音楽を作成しました。LogicProはシンセサイザーをいじれるので、効果音の作成では、自分が思っている音を出すために、とても有益でした。 これも慣れが必要ですので、とりあえず、楽譜を読んで、それをちょっとづつ「音源を変えたり」「音程を変えたり」色々試して、音楽や効果音とはどういうものなのかを勉強しました。

16ヶ月〜19ヶ月(2013年1月~3月)

この時期は、テストプレー、cocos2d 2.0変更、メモリーリークの解消、retina4インチへの対応などをしています。

結果的に、この時期のテストプレーの質が悪いのが、今後の最大の課題にはなるのですが、このアプリを作成する工程で一番困ったのが、メモリーリークの問題でした。 アプリが途中で落ちる。マップの切り替わりに、度々エラーが表示されずに落ちるので、ここで初めてxcodeの「instruments」を使って調べてみると、「メモリーの使用量が、ゲームが進むごとに増加する」「マップの切り替わり時に、メモリーの消費量が一瞬増大する」。この2点が原因で、アプリが強制終了をしていたのです。

私のメモリーの管理が全然なっていなかったのもあるのですが、サイズの大きいタイツマップを読むとどうしてもメモリーに負担がかかってしまうこと、音楽の再生で利用していたCDAudioManagerクラスが、すごくメモリーを占領していた根本的な問題に対しては、事前にもう少し調べていれば、対処の仕様があったのですが、既にガッチリ作ってしまっていたので、これ以外の部分でどう修正をしていくかが難しかったです。

cocos2dのバージョンアップはそのメモリー問題の対処法で導入をしたのですが、結果的に、原因は別にあったので、どちらでもよかったのですが、良い勉強をさせてもらいました。

アプリの作成で最初にしておきたいこと

今回のアプリを作成して、日程を見なおした所、今後どう改善をしていかなければ行かないのかがわかってきました。 ぜひ、これから、アプリを作成される方が、いましたら、気をつけていただいきたいと思います。

行き当たりばったりではなく、最初にある程度設計をしたほうがいい。(デザインをしたほうがいい)

プログラミング初心者ということで、何をどう作成したらいいのかわからずに、とりあえず、作りながらマップやシステム、キャラクターを作成していきました。 そうすると、所々で整合性がとれない部分がでてきたり、色々付け足していくと、プログラムがスパゲティ状態になったり、フラグの設定がうまくいかなかったりと自分でもゲームの内容を把握をしにくくなります。

また、ゲームの内容だけではなく、もし広告を入れるなら、それに適したデザインを考えないといけないですし、プロモーションの仕方も考えないといけません。

まずは、大体のゲーム内容の概要、デザインを決めて始めましょう。 どの仕掛けを作る、キャラクターを作る、イベントを作る、この辺りを前もってしっかり確定してからゲームを作り始めたほうが、後々時間がかからずにアプリケーションを作成することができるでしょう。

Retina対応した画像を作成しよう

今ですとRetina対応は当たり前、iPhone5などに採用されているRetina4インチにも対応しておかないと、今後Appleからアプリ自体がAppStoreからはじき出されてしまいます。 Retinaに対応する画像を作成するのは大変手間がいりますが、最初からRetinaありきでアプリを作成しましょう。

テストをする際に、メモリー消費を意識しよう

アプリケーションの規模にかかわらず、メモリーを気にしながらアプリを作成しましょう。 これは、後々まで放っておくと大変なことになります。「instruments」という便利なツールがありますので、実機でしっかりとメモリーリークがないか、極端にメモリーの使用量がないかを把握してください。 「instruments」は、最初見方がわかりにくいので、とっつきにくいですが、しっかりとつかっていきましょう。この使い方に関しては、私もだいぶ慣れてきたので、ブログで使い方を書いて行きたいと思います。