LoginSignup
3
3

More than 5 years have passed since last update.

LayerやNodeを継承するときのアレをC++として書き直す

Posted at

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"が二回あるのが冗長で省略したいけど書き方分からないです・・・・

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3