我似乎无法重写CCLayer子类中的init()方法。
我能够覆盖create()方法。我需要做的就是在创建图层时将int传递给init()方法:
这是create(int n)方法
CCLayer* Stage::create(int n)
{
CCLayer *pRet = new CCLayer();
if (pRet && pRet->init(n))
{
pRet->autorelease();
return pRet;
}
else
{
CC_SAFE_DELETE(pRet);
return NULL;
}
}
bool DuneStage::init(int ss)
{
// this code should execute
}
在.h文件中:
virtual bool init(int n);
static CCLayer* create(int z);
还需要在CCLayer.cpp文件中重写此方法吗?
bool CCLayer::init()
{
bool bRet = false;
do
{
CCDirector * pDirector;
CC_BREAK_IF(!(pDirector = CCDirector::sharedDirector()));
this->setContentSize(pDirector->getWinSize());
m_bTouchEnabled = false;
m_bAccelerometerEnabled = false;
// success
bRet = true;
} while(0);
return bRet;
}
最佳答案
重写的方法签名必须是父类方法virtual bool init()
如果要发送参数,则可以在CCLayer子类中将它们声明为成员变量,然后在调用init
方法中的create
方法之前分配它们。
CCLayer* Stage::create(int n)
{
CCLayer *pRet = new CCLayer();
pRet->n = n
...........
...........
}
Stage* Stage::create(int n)
{
Stage* pRet = new Stage();
pRet->n = n
...........
...........
}