トップページへ戻る
つくれる?iPhoneアプリ
cocos2dを使ったiPhoneアプリ制作を解説してみる

その5


どのページでも
ご自由にリンクしてください。

感想ご要望はお気軽に!
info@taskinteractive.com


■順番に解説
・導入
その1
導入


その2
HelloWorld


その3
わからない単語でも安心


その4
いじるファイルと画面構成


その5
ソースにある単語を手探る


その6
実行の順を追って手探る


その7
クラスの名前と素性を手探る


・サンプル1
その8 ボール遊び1
Scene/Layer/Sprite


その9 ボール遊び2
ファイル名を変えてみる


その10 ボール遊び3
ソースをいじってみる



■項目ごとに解説
クラスの解説
その1 クラスって何?


クラスの解説
その2 インスタンスって何?


クラスの解説
その3 オブジェクト指向って何?




企画・販売元タスクインタラクティブ


実行の順を追って手探る

その5 ソースにある単語を手探るで書いた単語を手がかりに、実際の例題から手探ってみましょう。

まずはプロジェクトを新規作成してください。
[cocos2dBall] という名前で作成すると、ここと同じ状態が見られると思います。


その2と同じように、まずはビルドしてみましょう。
『HelloWorld』という文字が表示されたと思います。

 ・このテキストの変更の仕方は → その2 HelloWorld


ここでは、どういう順番でソースを解釈してこの結果にたどり着いたのか、までを、関係するファイルと単語を追いながら手探ります。




プロジェクトをビルドして実行すると、まず main.m から処理が始まります。
上の画像(クリックで拡大)の右に3つウィンドウが並んでいる一番上に main.m のソースを表示しています。

その中に、こういう関数があります。
int main(int argc, char *argv[]){
}
これは、Objective-Cでは無く、Cの関数です。
このページその4 いじるファイルと画面構成の『自分で編集するファイルはどれか』という項目の中で、(とりあえず)自分では編集しないファイルとして説明していますが、まずは無条件に、処理はこのCの関数から始まると思ってください。

なんでObjective-Cの中にCの関数があるの?ということについては、簡単ですがその2 HelloWorldここでチラッと触れています。


で、そのCの関数の中に int main(int argc, char *argv[]){
 int retVal = UIApplicationMain(argc, argv, nil, @"cocos2dBallAppDelegate"); }
という記述があるのがわかると思います。

ここでは、『cocos2dBallAppDelegate』というクラスを実行しています。
そのクラスは、
cocos2dBallAppDelegate.h
cocos2dBallAppDelegate.m という二つのファイルで定義されています。
.hは設定が書かれるヘッダファイル、.mはその処理が書かれたファイルです。

(ここから先の解説は、その2でも触れていますので、必要であればあわせてそちらもご覧ください。)


ということで、cocos2dBallAppDelegate.m の中身を見てみましょう。

@implementation cocos2dBallAppDelegate

という記述がありましたね。この@implementation cocos2dBallAppDelegate は cocos2dBallAppDelegate というクラスの処理内容を記述したものでしたね。

その処理内容を見ると、こういう記述があります。

- (void) applicationDidFinishLaunching:(UIApplication*)application

{

         :

[[Director sharedDirector] runWithScene: [HelloWorld scene]];

}




- (void) applicationDidFinishLaunching:(UIApplication*)application
{
}

この記述は、アプリケーションの起動が完了したら自動で実行される内容を書いたものでした。

その中に、(Directorどうのこうのはとりあえず無視して)[HelloWorld scene]こういう記述があります。

これは、HelloWorld というクラスにメッセージを送っているもので、scene というメソッドに書かれている内容を実行しろ、というものです。
メソッドとは、具体的な処理が書かれた関数のようなもので、クラスの中には複数のメソッドを定義することができます。

例えて言うなら、電子レンジの『自動メニュー』の(あたため)(熱燗)(解凍)のようなものです。
別の例えを言うなら、自動車というクラスがあったとしたら、(ヘッドライト)(ハンドル)(アクセル)(クラクション)のような、自動車として一体に存在しているけど、個々に機能させることが出来る機構のようなものです。


ということで、次にその HelloWorld というクラスが定義されているHelloWorld.mというファイルを見に行きます。

すると、こういう記述がありました。

+(id) scene

どうやらこの中身が実行されているようです。


[クラス名 メソッド名]
こんな記載があった場合、そのクラスが定義されているファイルを探して、
+(***)メソッド名 か、
-(***)メソッド名 の記述を探せば、そこに処理内容が書いてあります。

この、プラスとマイナスには違いがありますが、詳しくは『クラス』と『インスタンス』の説明のところで書きます。
どっちかというと、マイナス記号で書くほうが普通です。
プラスはちょっと特殊で、ここでも

+(id) scene の中に、HelloWorld の正体が・・・あるように見えて、実際にはその下の
-(id) init
{
}
の中にあります。
この理由も、『クラス』と『インスタンス』を把握して、『メソッド』に + と - があることがわかればわかります。
ここでは、そういうもんだ、ぐらいに思っておいてください。


ともあれ、これで、アプリがiPhone上で起動されてから、実際に画面に『HelloWorld』が表示されるまでの流れがつながりました。

順に追っていけば、必ず処理をしている場所までたどり着くことが出来ます。
ここでは簡単なサンプルプログラムでしたが、どんな大きなプログラムになっても、同様に追うことが可能です。