So my port from iOS to Android is moving along, but I have some real uncertainty about how I’m making my CCSprite objects in C++. For whatever reason, I can’t seem to add them as a child to the scene.
Domino.h
/*
* Domino.h
*/
#ifndef DOMINO_H_
#define DOMINO_H_
using namespace std;
#include
#include "cocos2d.h"
class Domino : public cocos2d::CCSprite
{
public:
//Default Contructor
Domino();
//Overload Contructor
Domino(std::string, std::string, int, int, int, int, int, int, int, int);
//Deconstructor Contructor
~Domino();
//Accessor Constructor
string getstr_tilename() ;
string getstr_mirrortilename() ;
int getint_leading();
int getint_trailing();
int getint_suitrank() ;
int getint_trickvalue() ;
int getint_playerid() ;
int getint_matchtile() ;
int getint_bidvalue() ;
int getint_markvalue() ;
//Mutator Function
void setstr_tilename(string) ;
void setstr_mirrortilename(string) ;
void setint_leading(int);
void setint_trailing(int);
void setint_suitrank(int) ;
void setint_trickvalue(int) ;
void setint_playerid(int) ;
void setint_matchtile(int) ;
void setint_bidvalue(int) ;
void setint_markvalue(int) ;
private:
std::string _str_tilename;
std::string _str_mirrortilename;
int _int_leading;
int _int_trailing;
int _int_suitrank;
int _int_trickvalue;
int _int_playerid;
int _int_matchtile;
int _int_bidvalue;
int _int_markvalue;
};
#endif /* DOMINO_H_ */
Domino.cpp
/*
* Domino.cpp
*
*/
#include "Domino.h"
Domino::Domino()
{
_str_tilename="";
_str_mirrortilename="";
_int_leading=0;
_int_trailing=0;
_int_suitrank=0;
_int_trickvalue=0;
_int_playerid=0;
_int_matchtile=0;
_int_bidvalue=0;
_int_markvalue=0;
}
Domino::Domino(string str_tilename, string str_mirrortilename, int int_leading, int int_trailing, int int_suitrank, int int_trickvalue, int int_playerid, int int_matchtile, int int_bidvalue, int int_markvalue)
{
_str_tilename=str_tilename;
_str_mirrortilename=str_mirrortilename;
_int_leading=int_leading;
_int_trailing=int_trailing;
_int_suitrank=int_suitrank;
_int_trickvalue=int_trickvalue;
_int_playerid=int_playerid;
_int_matchtile=int_matchtile;
_int_bidvalue=int_bidvalue;
_int_markvalue=int_markvalue;
}
Domino::~Domino()
{
}
//===============================Getters======================================
string Domino::getstr_tilename()
{
return _str_tilename;
}
string Domino::getstr_mirrortilename()
{
return _str_mirrortilename;
}
int Domino::getint_leading()
{
return _int_leading;
}
int Domino::getint_trailing()
{
return _int_trailing;
}
int Domino::getint_suitrank()
{
return _int_suitrank;
}
int Domino::getint_trickvalue()
{
return _int_trickvalue;
}
int Domino::getint_playerid()
{
return _int_playerid;
}
int Domino::getint_matchtile()
{
return _int_matchtile;
}
int Domino::getint_bidvalue()
{
return _int_bidvalue;
}
int Domino::getint_markvalue()
{
return _int_markvalue;
}
//===============================Setters======================================
void Domino::setstr_tilename(string str_tilename)
{
_str_tilename=str_tilename;
}
void Domino::setstr_mirrortilename(string str_mirrortilename)
{
_str_mirrortilename=str_mirrortilename;
}
void Domino::setint_leading(int int_leading)
{
_int_leading=int_leading;
}
void Domino::setint_trailing(int int_trailing)
{
_int_trailing=int_trailing;
}
void Domino::setint_suitrank(int int_suitrank)
{
_int_suitrank=int_suitrank;
}
void Domino::setint_trickvalue(int int_trickvalue)
{
_int_trickvalue=int_trickvalue;
}
void Domino::setint_playerid(int int_playerid)
{
_int_playerid=int_playerid;
}
void Domino::setint_matchtile(int int_matchtile)
{
_int_matchtile=int_matchtile;
}
void Domino::setint_bidvalue(int int_bidvalue)
{
_int_bidvalue=int_bidvalue;
}
void Domino::setint_markvalue(int int_markvalue)
{
_int_markvalue=int_markvalue;
}
GameScene
CCSpriteBatchNode *spritesBgNode;
spritesBgNode = CCSpriteBatchNode::create("stack.png", kCCTexture2DPixelFormat_RGBA4444);
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("stack.plist");
this->addChild(spritesBgNode, 0);
Domino d00; //In Objective C, it was defined as a pointer. Am I doing this correctly here?
d00.createWithSpriteFrameName("blank.png");
d00.setstr_tilename("0-0.png");
d00.setstr_mirrortilename("0-0.png");
d00.setint_leading(0);
d00.setint_trailing(0);
d00.setint_bidvalue(3);
d00.setint_matchtile(0);
d00.retain();
this->addChild(&d00, 2);
What I end up getting is an assertion failure: “CCAssert(m_uReference > 0,”reference count should greater than 0“);” Where I assume this object is attempting to release an object that’s already released. Why would it be doing this even though I set it to retain? The program does not crash if I don’t try to add it as a child, but that sort of defeats the purpose. What am I doing wrong?