cocos2d-x在更新方法中使用create()方法

cocos2d-x在更新方法中使用create()方法,cocos2d-x,Cocos2d X,我在游戏中使用cocos2d-x。 我对cocos2d-x创建方法有一些疑问 当游戏角色需要在更新方法中更改动画时,我总是使用create()方法创建新动画、动画、RepeatForever对象 但我认为这是不好的,因为如果我创建新的动画,动画,重复对象来改变我的游戏角色的动画,如下所示 (下面的代码只是更新方法的一部分) 当游戏角色频繁更改动画时,会导致创建太多cocos对象。那我该怎么办 p、 我使用类memeber变量来保存该对象,而不是在更新方法中为每个循环创建新的cocos动画对象,

我在游戏中使用cocos2d-x。 我对cocos2d-x创建方法有一些疑问

当游戏角色需要在更新方法中更改动画时,我总是使用create()方法创建新动画、动画、RepeatForever对象

但我认为这是不好的,因为如果我创建新的动画,动画,重复对象来改变我的游戏角色的动画,如下所示 (下面的代码只是更新方法的一部分)

当游戏角色频繁更改动画时,会导致创建太多cocos对象。那我该怎么办

p、

我使用类memeber变量来保存该对象,而不是在更新方法中为每个循环创建新的cocos动画对象, 但是它会导致错误错误,错误是“expression\u referenceCount>0”

p、 s2

我对我糟糕的英语感到抱歉

内部ClassName.h:

CCAction* _aniRun;
void createAnimation();
内部ClassName.cpp:

// create a function
void ClassName::createAnimation()
{
    // run ani
    CCAnimation* animation=CCAnimation::create();
    animation->setDelayPerUnit(0.05f);
    for (int i=0; i<1; i++)
    {
        char str[50];
        sprintf(str,"game/bird/run%d.png", i);
        animation->addSpriteFrameWithFileName(str);
    }
    _aniRun = CCRepeatForever::create(CCAnimate::create(animation));
    _aniRun->retain();
}
不要忘记在析构函数内释放
\u aniRun

CC_SAFE_RELEASE(_aniRun);

我也是cocos2d-x的新手。我对它没有完全的控制权。。我对retain()和release()有基本的了解

在Cocos2DX中,有一个AutoreleasePool——当您调用object->autorelease()时,它负责referenceCount 将被添加到此自动释放池。此池将帮助您在当前帧的生存期内重新获取对象

Ref有4个功能,含义如下

retain: add reference count by 1

release: minus reference count by 1

autorelease: put the object in to AutoReleasePool, which means that cocos2d-x will invoke release automatically at the end of this frame

getReferenceCount: as the meaning of the function, it will retain the reference count of this object
cocos2dx有一个自动释放池,它将清除保留计数为0的对象,这是一个用于检查cocos2dx对象范围的变量

现在,当您使用create方法创建新对象时,它已经添加到自动释放池中,您不需要在任何地方释放或删除它

但当您使用“new”创建新对象时,您肯定需要在其析构函数中或在其使用结束后释放它

当您的对象被添加到自动释放池中,但您在其他地方需要它时,您可以只保留它,这会将其保留计数增加1,然后您必须在其使用结束后手动释放它

无论何时添加子对象,它都会自动保留,但不需要释放它,而是从父对象中删除它

retain()和autorelease()有一些简单的规则:

  • 我用new创建的所有东西都是我的,我负责从内存中删除它们

  • 使用create()方法返回的所有内容都将自动删除,并在当前方法结束时释放。如果重新计数为零,它们将从内存中清除。当我在实例变量中需要它们时,我必须保留它们

  • 我所保留的一切都必须从记忆中释放出来


  • 将此保留/释放对象视为参考计数器。如果计数器降到零,对象将被删除。

    对不起,我可以问更多关于cocos节点对象的问题吗?什么是retain()方法?我听说retain()和release()是控制cocos节点对象引用计数的方法。但是,cocos对象引用计数何时增加或减少?你能给我一些关于retain()和release()的想法吗?当我调用retain和release()时?多谢各位much@HelloWorld我添加了一个答案,它将帮助你。。不太清楚,因为我也是新来的。。
    CC_SAFE_RELEASE(_aniRun);
    
    retain: add reference count by 1
    
    release: minus reference count by 1
    
    autorelease: put the object in to AutoReleasePool, which means that cocos2d-x will invoke release automatically at the end of this frame
    
    getReferenceCount: as the meaning of the function, it will retain the reference count of this object