トップページへ戻る
つくれる?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 オブジェクト指向って何?




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


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

その6 実行の順を追って手探るでは、アプリが起動してから順に、実行される内容を単語やファイルを辿って手探ってみました。

実際に単語を辿っていくと、順に処理をされていることがわかり、単語を追うことで処理が追える事がわかったかと思います。

が、ちょっと疑問が残らないでしょうか。

まず一つ目は、その5 ソースにある単語を手探るで残っていた疑問です。

↓↓↓↓↓↓↓↓↓

じゃあその後ろの : Layer は何かというと、、、それは後ほど解説しますが、これも手探りでヒントを見つける重要な手がかりになりますので、

@interface HelloWorld : Layer

を見つけたら、 HelloWorld というクラスを定義するんだ。
それはどうも Layer という言葉と関係があるらしい、ぐらいに思っておいてください。

↑↑↑↑↑↑↑↑↑


このなぞを探りながら、さらに手探りで理解を深めていきたいと思います。



クラスはほかのクラスをコピーして機能追加できる




この HelloWorld というクラスの定義に出てくる Layer とは何か

@interface HelloWorld : Layer

という謎の解答をあっさり言ってしまうと、HelloWorld というクラスは、Layer というクラスをコピーして出来ている、ということです。
そこに、HelloWorld というクラス独自のメソッド(処理内容)を追加しています。

なので、HelloWorld というクラスの処理内容は、HelloWorldScene.m の中のHelloWorldクラスの処理内容を記述した部分

 @implementation HelloWorld
  から
 @end

だけを見てもすべてが書かれているわけではありません。
コピー元の Layer というクラスを探して、その処理内容を見る必要があります。

なので、その Layer というクラスを定義しているらしいファイルを探してみましょう。


その4 いじるファイルと画面構成のところで、『自分でいじることは無いが、しょっちゅう中身を開いてみることがあるファイル』として、cocos2dというグループの中にあるファイルのことを説明したのを覚えていらっしゃるでしょうか。

そこでも触れたように、この『グループとファイル』の中の『cocos2d』というサブグループの中には、『cocos2d』のライブラリが収められています。
ライブラリとは、クラスなどをある目的の為に複数まとめたものを便宜的にさす言葉です。

そこに、Layer.h Layer.m というファイルが見つかると思います。
特に事情が無ければ、クラス名と、そのクラスを定義しているファイルの名前は同一にするのが普通です。
(実際には一致しない場合もありますし、二つ以上のクラスを定義するファイルもあります。)

その Layer というクラスを定義している Layer.h というファイルを開いたものが、図の左側中段のウィンドウです。

そこには、こういう記載があります。

@interface Layer : CocosNode .....


つまり、今度は Layer というクラスは、 CocosNode というクラスを元に定義されていることがわかります。

これは、最初の HelloWorld というクラスは、 Layer というクラスを受け継いで作られていて、その Layer というクラスは、 CocosNode というクラスを受け継いで作られている、ということです。
同時に、HelloWorld というクラスは、 Layer というクラスで定義されている処理内容も、 CocosNode というクラスで定義されている処理内容も、処理できる、ということを意味しています。

ではさらに順を追って CocosNode.h というファイルに記載されている CocosNode というクラスの定義を見てみましょう。

この調子でどこまでもどこまでも辿らなきゃならないのかと思うと先が見えなくて不安ですが・・・

@interface CocosNode : NSObject


という記載があるのがわかると思います。

今度は、CocosNode というクラスは、 NSObject というクラスを受け継いで定義されていることがわかります。

が・・
実はこれが、クラスの受け継ぎを辿るゴールです。
NSObject というのは、Objective-Cのすべてのクラスの元になるクラスオブジェクトで、すべてのクラスが、最終的にはこれにたどり着きます。
で、これは何かというと、クラスを定義するための『白紙』ぐらいに思っておいてかまいません。




クラスと継承

この、あるクラスの処理内容を受け継ぐことを、正確には『継承』という言い方をします。
そして、元になるクラスのことを、『スーパークラス』とか、俗には『親クラス』とか言ったりします。
ここでいうと、HelloWorld というクラスのスーパークラスは Layer。
Layer というクラスのスーパークラスは CocosNode というクラスです。


スーパークラスを辿りながら、その処理内容を見ていけば、必ずどこかにそれが書いてあります。

[クラス名 メソッド名] の処理を記述した
- (***) メソッド名
+ (***) メソッド名
こういう記載が、必ず見つかります。


処理の内容を完全に理解できないまでも、どこにそれが書いてあるかわかるだけで、ちょっと安心するものです。