我似乎无法重写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
   ...........
   ...........
}

10-08 11:55