cocos2dを利用していた時は、親クラスのメソッドを色々と拡張してクラスを作成していたのですが、cocos2dxではやり方が少し違うので、余り利用をしていませんでした。 [virtual bool init();]ぐらいです。
でも、クラスを拡張した方が楽をできる部分が出てきたので、本日少し勉強しました。 今回は、「クラスの拡張」についてブログに書きたいと思います。
親クラスのメソッドを拡張する
親クラスのメソッドを拡張する際には、virtualを頭に付けます。 これはCCLayerなどで既に利用していると思いますが、こうすることで親クラスではなく拡張したクラスを読み込んでくれます。 [c]
//ヘッダー virtual bool init();
//cpp bool TrophyLayer::init(){
if (!CCLayer::init()) {
return false;
}
return true;
}
[/c]
その際には、親クラスのメソッドがあるかどうかを確認しています。(例ではCCLayer::init()) このような感じで利用できます。
create()を拡張する
cocos2dxでは、create()を定義することができ、これが非常に使いやすいので重宝しています。 今までは、このcreate()を拡張することができないため拡張を余りしていませんでした。
CCSpriteクラスの拡張を下記のようにします。 [c]
//ヘッダー static MySprite create(const char pszFileName);
//cpp MySprite MySprite::create(const char pszFileName){
MySprite *sprite = new MySprite();
if (sprite && sprite->initWithFile(pszFileName)) {
sprite->autorelease();
return sprite;
}
CC_SAFE_DELETE(sprite);
return NULL;
}
[/c]
これが今日最大の発見です。
最後に
この2つを駆使すれば、既存のクラス内のメソッドを拡張することができるでしょう。 ただし、変更しない部分も記述しないといけないので非常にメンドクサイ感じがします。 これがもっと簡単でわかりやすくなればいいなあと思いました。