C++ 如何在cocos2d-x中设置多个动画
我现在开始使用cocos2d-x为黑莓/android/iOS构建游戏 我有png和plist用于使用texturepacker创建的角色动画。我使用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()中): 加载动画的函数(_
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>
太好了,非常感谢,我不知道有些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);