![]() |
つくれる?iPhoneアプリ
cocos2dを使ってPHPぐらいはわかるプログラマーに解説してみる クラスの解説 |
どのページでも ご自由にリンクしてください。 感想ご要望はお気軽に! info@taskinteractive.com ■順番に解説 ・導入 その1 導入 その2 HelloWorld その3 わからない単語でも安心 その4 いじるファイルと画面構成 その5 ソースにある単語を手探る その6 実行の順を追って手探る その7 クラスの名前と素性を手探る ・サンプル1 その8 ボール遊び1 Scene/Layer/Sprite その9 ボール遊び2 ファイル名を変えてみる その10 ボール遊び3 ソースをいじってみる ■項目ごとに解説 クラスの解説 その1 クラスって何? クラスの解説 その2 インスタンスって何? クラスの解説 その3 オブジェクト指向って何? |
被り物を被ってクラスの処理表を持ったあいつがオブジェクト
正確には、インスタンスオブジェクト。
コロ君で言うと、『ボール7』というあだ名(インスタンス名)呼ばれ、『おーい、ボール7よー。xのyに移動してー』といわれると、親方から渡されたクラスの処理表を見て、『移動(x,y)をすればいいんだな』と理解し、その場所に移動する、という感じです。
逆に、クラスの処理表に書かれていない、つまり、インスタンスメソッドとして定義されていないメッセージを受け取っても、何もしません。 と、ここまでは一人一生懸命いろいろな人に指示を出していた親方君ですが、次の『オブジェクト指向はメッセージの投げ合い』からは、何もしません。 その違いを見てください。 オブジェクト指向の利点はメッセージの投げ合い
さて、今は『ボール7』の役割を与えられてステージにあがるコロ君ですが、当然ビリヤードは沢山の玉を使います。 試合開始ー いよいよ、ゲームが始まりました。 はたから見ていると、ゲームのスタートのときはなにやら親方君が指示を出したりしていましたが、その後はほとんど指示を与えることがありません。 その代わり、ボール役(インスタンスオブジェクト)それぞれが、ボール同士でぶつかったりする度に『処理表』を見ながらお互いに何かを伝え合い、進行しています。 ちょっとそのうちの一場面、『ボール7』と『ボール2』がぶつかった場面を見てみましょう。 静止しているニシローランドゴリラに、フクロテナガザルが激突する、なんていうことが野生で起こったら大変なことになりますが…
『ボール7』が静止しているところに、『ボール2』が転がってきて、いままさに衝突しようとしています。 ぶつかった!その瞬間に、 『ボール2』から『ボール7』へのメッセージ 「いま君と僕とはぶつかる!君の現在の“x座標”と“y座標”と“動いている方向”と“速度”を教えて!」 『ボール7』から『ボール2』への返答 「x座標は120 y座標は100、動いていないから方向は0で、速度も0だよ!」 返答を受け、処理表を見て計算する『ボール2』。そして再び 『ボール2』から『ボール7』へのメッセージ 「君はそこから、223度の方向に、20の速度で移動を始めて!」 『ボール7』から『ボール2』への返答 「了解!」 この間、親方が口を挟んだり、指示を出したりすることはありませんでした。 ボールというインスタンスオブジェクトがぶつかり合うたび、このように互いに情報を交換しながら、スムーズにゲームが進んでいったのです。 オブジェクト同士のメッセージの投げあい これが、オブジェクト指向の処理のひとつのカタチです。 なんとなくお分かりいただけたと思いますが、別の疑問も出てくると思います。 その詳細な解説は別の機会にするとして、ちょっと先回りして疑問になりそうな点を上げてみると… ・どのタイミングで衝突の判定をするの? →1秒間に60回とかでタイマーをまわしておいて、そのタイミングで各オブジェクトに衝突状況の判定をさせたりする方法などがあります。 ・ぶつかった後の移動は、永遠に続いてしまわないの? →移動中は移動を処理するルーチンに留めておき、そのルーチン内で速度を減少させていく、という方法や、前述のようなタイマーからメッセージが来るたびに、自身の移動速度などを再計算して減少させていく方法などがあります。 上記はあくまで一例です。 処理はいろいろな方法がありますので、今の段階で思いつく疑問は、大体解決方法がそのうち見つかるから大丈夫、ぐらいに思っておいてください。 |