Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在cocos2d-x中设置多个动画_C++_Animation_Sprite_Cocos2d X - Fatal编程技术网

C++ 如何在cocos2d-x中设置多个动画

C++ 如何在cocos2d-x中设置多个动画,c++,animation,sprite,cocos2d-x,C++,Animation,Sprite,Cocos2d X,我现在开始使用cocos2d-x为黑莓/android/iOS构建游戏 我有png和plist用于使用texturepacker创建的角色动画。我使用CCSpriteBatchNode和CCSpriteFrameCache加载它们,然后使用我创建的函数将所有帧加载到一个帧数组中,然后创建一个CCAnimation对象并存储用动画创建的CCAnimate对象(代码更清晰)问题是,我有一个功能,检测触摸,它应该循环通过所有动画,但它总是崩溃 下面是一些代码(这在init()中): 加载动画的函数(_

我现在开始使用cocos2d-x为黑莓/android/iOS构建游戏

我有png和plist用于使用texturepacker创建的角色动画。我使用
CCSpriteBatchNode
CCSpriteFrameCache
加载它们,然后使用我创建的函数将所有帧加载到一个帧数组中,然后创建一个
CCAnimation
对象并存储用动画创建的
CCAnimate
对象(代码更清晰)问题是,我有一个功能,检测触摸,它应该循环通过所有动画,但它总是崩溃

下面是一些代码(这在
init()
中):

加载动画的函数(_charanimation[]只是一个CCAnimate数组):

它崩溃了。。。我不知道我是否做错了,如果有人能帮助我,我将不胜感激

如果我在
runAction()
中更改动画,它会正确显示动画,但我无法使用触摸更改ingame

顺便说一下,这是我在控制台中遇到的错误:

cocos2d-x debug info Assert failed: reference count should greater than 0
In function retain -- ..\..\cocoa\CCObject.cpp:92 m_uReference > 0 -- assertion failed

这是因为您创建的
CCAnimate
对象是autorelease对象,并且您没有保留该对象自动释放如果对象未显式或由其他对象保留,则将自动删除这些对象

在添加到阵列时,您可以执行以下操作

CCAnimate *animate = CCAnimate::create(CCAnimation::createWithSpriteFrames(animframes, delay));
animate->retain();
_charanimation[a] = animate;
一切结束后,不要忘记释放阵列中的所有对象

_charanimation[index]->release();
  • 注:

    < >使用简单的C或C++数组,可以使用COCOS2D的代码> CCArray < /C> >一旦在数组中添加,<强>保留该对象< < /P>
例如:(内存处理类似于Objective-C)


太好了,非常感谢,我不知道有些cocos2d对象会自动释放。你可以发布一个关于如何使用CCArray的示例吗?我不知道在添加到CCArray后如何获取对象。我还在学习如何使用它我还有一个问题。。。我如何将所有这些东西整合到一个类中(比如一个player类),然后将其集成到init中?我试过了,但它崩溃了,我想我没有很好地管理batchnodes和缓存,也许它不可能是一个独立类的一部分,我不知道,我需要一些例子。。。你能帮助我吗?我需要一个类,我可以通过.png和.plist(需要任何额外的信息),并有一个方法,我可以调用像PlayAnimation(索引);所以我可以创建一些类似于播放器p1,p2的东西;在代码的某些部分,我可以运行p1.PlayAnimation(2);p2.播放动画(0);我在答案中加了一个例子。有关
CCArray
的更多信息,请参阅此处的链接。如最后一段代码所述,在不将对象保留到未保留数组的情况下添加对象是否会保留该对象?或者我必须保留数组才能自动保留对象?
cocos2d-x debug info Assert failed: reference count should greater than 0
In function retain -- ..\..\cocoa\CCObject.cpp:92 m_uReference > 0 -- assertion failed
CCAnimate *animate = CCAnimate::create(CCAnimation::createWithSpriteFrames(animframes, delay));
animate->retain();
_charanimation[a] = animate;
_charanimation[index]->release();
_charanimation = new CCArray();

//To add object to array
_charanimation->addObject(object);  //This will retain the object

//To get an object
_charanimation->objectAtIndex(index);
_charanimation->lastObject();
_charanimation->randomObject();

//To remove object
_charanimation->removeObjectAtIndex(index);  //This will release object
_charanimation->removeObject(object);        //This will release object

//Dont forget delete array later
delete (_charanimation);