LayerやNodeを継承するときのアレをC++として書き直す
新しいシーンなどを生成する際にcocos2d::Layerやcocos2d::Nodeを継承し、その後CREATE_FUNC()なるマクロを利用しますがこの部分をC++のテンプレートで書き直してみます。ただそれだけのことです。
書き直した結果がこれ↓
template< class T, class S>
class CocosObject {
public:
static T* create(){
auto object = new T();
if( object && object->S::init() && object->init() ){
object->autorelease();
return object;
} else {
delete object;
return nullptr;
}
};
class HelloWorldScene : public CocosObject< HelloWorldScene, cocos2d::Layer > {
public:
// シーンの生成
static cocos2d::Scene* createScene(){
auto scene = cocos2d::Scene::create();
auto layer = create();
scene->addChild( layer );
return scene;
}
// 初期化
bool init(){
// cocos2d::Layer->init();はCocosObjectクラスでするため記述不要
return bool;
}
};
手元で使ってるはテーマとは関係ない部分もあったので、手で修正しているので過不足があるかもしれません。
シーン特化であればcreateScene()はCocosObject側へ持って行けるのでもっとすっきりと書けますね。
P.S.
HelloWorldScene: CocosObject<HelloWorldScene, cocos2d::layer>
とかいてる部分の"HelloWorldScene"が二回あるのが冗長で省略したいけど書き方分からないです・・・・