我何时使用cocos2d-x中的参数在Custom create function中初始化变量?

时间:2014-03-17 05:07:40

标签: c++ cocos2d-x

我创建了一个自定义图层,我希望将两个变量传递给该图层。我应该在构造函数或Tlayer函数中初始化Hlayerinit()吗?我检查了一些材料,大多数说我们应该避免使用构造函数。为什么?

TouchLayer* TouchLayer::create(TcharacterLayer* t,HcharacterLayer* h){
    TouchLayer* pRet = new TouchLayer();
    if (pRet && pRet->init())
    {
        pRet->autorelease();
        return pRet;
    }else
    {
        delete pRet;
        pRet = NULL;
        return NULL;
    }
}

class TouchLayer : public CCLayerColor
{
public:
    TouchLayer();
    ~TouchLayer();
    virtual bool init();
    virtual void onEnter();
    virtual void onExit();
    CREATE_FUNC(TouchLayer);
    static TouchLayer* create(TcharacterLayer* t,HcharacterLayer* h);

    TcharacterLayer* Tlayer;
    HcharacterLayer* Hlayer;
};

3 个答案:

答案 0 :(得分:1)

我认为你可以得到一些关于&#34的相关信息;为什么我们应该使用init()方法而不是构造函数"在这里:https://stackoverflow.com/a/20280664/3090526

答案 1 :(得分:0)

  • 如果您的班级只有一个构造函数,您可以在构造函数中初始化您的类成员。
  • 但是如果你有多个构造函数,那么我认为你应该在init()函数中初始化你的类成员,因为如果不是你必须在每个构造函数中初始化你的类成员而你可能会错过一些成员。

  • 如果您使用现代编译器,则可以使用Delegating constructors而不需要编写init()函数。

Delegating constructors - gcc 4.7

答案 2 :(得分:0)

您应该在静态TouchLayer* pRet = new TouchLayer();方法中的行create之后分配这些变量。例如:

pRet->Tlayer  = t;
pRet->Hlayer  = h;