覆盖init()方法,Cocos2d-x v2.2

时间:2014-08-20 15:13:06

标签: android c++ cocos2d-x

我似乎无法覆盖我的类中的init()方法,该类是CCLayer的子类。 我能够覆盖create()方法。我需要做的就是在我为init()方法创建图层时传递一个int: 这是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;
}

1 个答案:

答案 0 :(得分:0)

重写的方法签名必须是父类方法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
   ...........
   ...........
}