cocos2d-x在更新方法中使用create()方法
我在游戏中使用cocos2d-x。 我对cocos2d-x创建方法有一些疑问 当游戏角色需要在更新方法中更改动画时,我总是使用create()方法创建新动画、动画、RepeatForever对象 但我认为这是不好的,因为如果我创建新的动画,动画,重复对象来改变我的游戏角色的动画,如下所示 (下面的代码只是更新方法的一部分) 当游戏角色频繁更改动画时,会导致创建太多cocos对象。那我该怎么办 p、 我使用类memeber变量来保存该对象,而不是在更新方法中为每个循环创建新的cocos动画对象, 但是它会导致错误错误,错误是“expression\u referenceCount>0” p、 s2 我对我糟糕的英语感到抱歉 内部ClassName.h:cocos2d-x在更新方法中使用create()方法,cocos2d-x,Cocos2d X,我在游戏中使用cocos2d-x。 我对cocos2d-x创建方法有一些疑问 当游戏角色需要在更新方法中更改动画时,我总是使用create()方法创建新动画、动画、RepeatForever对象 但我认为这是不好的,因为如果我创建新的动画,动画,重复对象来改变我的游戏角色的动画,如下所示 (下面的代码只是更新方法的一部分) 当游戏角色频繁更改动画时,会导致创建太多cocos对象。那我该怎么办 p、 我使用类memeber变量来保存该对象,而不是在更新方法中为每个循环创建新的cocos动画对象,
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()有一些简单的规则:
将此保留/释放对象视为参考计数器。如果计数器降到零,对象将被删除。对不起,我可以问更多关于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