reference count should be greater than 0

リファレンスカウンタ周りのエラー。

基本的にcocos2d-xのクラスはRefクラスを継承していて、リファレンスカウンタの仕組みを使用している。

Node#createインスタンスを生成する((newはスコープで制限されてるので呼べない))とRef#autorelease状態のインスタンスを取得できるが

クラスのメンバ変数は、自分でreleaseさせたいので、自分でリファレンスカウンタを意識する必要がある。

これがちゃんとなっていない所為で上記のエラーメッセージが出てたのでメモ。

とはいえ、カウンタを操作するRef#retainRef#releaseは、自分で呼びたくないので、マクロを使います。

//Part.h

class Part : public cocos2d::Node
{
public:    
    CC_SYNTHESIZE_RETAIN(cocos2d::Sprite*, _sprite, Sprite);
};
}

CC_SYNTHESIZE_RETAIN で宣言すると、内部的にRef#retainを呼んでくれる。setter,getterも自動で作られる。

//Part.cpp

Part::Part(Vec2* pos) : _pos(pos), _sprite(NULL) //まずnullを初期設定
{
 //画像をセット。テクスチャアトラスからとってきてます。
    this->setSprite(Sprite::createWithSpriteFrameName("snake_down.png"));
}

Part::~Part()
{
    CC_SAFE_RELEASE_NULL(_sprite);
}

・デストラクタでCC_SAFE_RELEASE_NULL呼んで、Ref#releaseする。