我什么时候用cocos2d-x中的参数初始化自定义创建函数中的变量?

When do I init the variables in Custom create function with argument in cocos2d-x?

本文关键字:创建 函数 变量 自定义 参数 什么时候 cocos2d-x 初始化      更新时间:2023-10-16

我已经创建了一个自定义图层,我想在这个图层中传递两个变量。我应该初始化TlayerHlayer在构造函数或init()函数?我查了一些资料,大多数都说我们应该避免使用构造函数。为什么?

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;
};

我想你可以得到一些有关"为什么我们应该使用init()方法而不是构造函数"的相关信息:https://stackoverflow.com/a/20280664/3090526

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

  • 如果你使用一个现代的编译器,你可以使用Delegating constructors而不需要编写init()函数

委托构造函数- gcc 4.7

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

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