我目前正在使用cocos2d-x构建黑莓/安卓/iOS游戏。我有一个角色动画的png和plist文件,使用texturepacker创建。我使用
以下是一些代码(这些代码放在
加载动画的函数(_charanimation []只是CCAnimate数组):
CCSpriteBatchNode
和CCSpriteFrameCache
加载它们,然后使用一个由我创建的函数将所有帧加载到帧数组中,然后创建一个CCAnimation
对象并存储用动画创建的CCAnimate
对象(代码更加清晰)。问题在于,我有一个检测触摸的函数,它应该循环播放所有动画,但总是崩溃。以下是一些代码(这些代码放在
init()
中):_batchNode = CCSpriteBatchNode::create("Character/girl.png");
_cache = CCSpriteFrameCache::sharedSpriteFrameCache();
_cache->addSpriteFramesWithFile("Personajes/girl.plist");
_character = CCSprite::createWithSpriteFrameName("girlneutral1.png");
_character->setPosition(ccp(winSize.width * 0.1, winSize.height * 0.5));
_batchNode->addChild(_character, 1);
this->addChild(_batchNode);
createAnimation(0, "girlpush", 8, 0.15f);
createAnimation(1, "girlneutral", 4, 0.3f);
createAnimation(2, "girlcrash", 12, 0.3f);
createAnimation(3, "girljump", 12, 0.2f);
createAnimation(4, "girltrick", 12, 0.3f);
_character->runAction(CCRepeatForever::create( _charanimation[3]));
this->setTouchEnabled(true);
加载动画的函数(_charanimation []只是CCAnimate数组):
void HelloWorld::createAnimation(int a, CCString animation_name, int frames, float delay)
{
CCArray* animframes = CCArray::createWithCapacity(frames);
char str[100] = {0};
for(int i = 1; i <= frames; i++)
{
sprintf(str, "%s%d.png", animation_name.getCString(), i);
CCSpriteFrame* frame = _cache->spriteFrameByName( str );
animframes->addObject(frame);
}
_charanimation[a] = CCAnimate::create(CCAnimation::createWithSpriteFrames(animframes, delay));
//_charanimation[a]->getAnimation()->setLoops(-1);
}
我成功让动画(使用runAction()
设置的那个)运行起来了,但是如果我尝试更改动画,比如当我触摸屏幕时:
void HelloWorld::ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event)
{
action++;
action%=5;
_character->stopAllActions();
_character->runAction( CCRepeatForever::create(_charanimation[action]));
char str[100];
sprintf(str, "Animation: %d", action);
pLabel->setString(str);
}
我的应用程序崩溃了……我不知道是我操作有误还是其他原因,如果有人可以帮忙,我将不胜感激。
如果我在 runAction()
中更改动画,则可以正确显示动画,但我无法通过触摸在游戏中更改该动画。
顺便说一下,这是我在控制台中收到的错误信息:
cocos2d-x debug info Assert failed: reference count should greater than 0
In function retain -- ..\..\cocoa\CCObject.cpp:92 m_uReference > 0 -- assertion failed
CCArray
的更多信息。 - Souandios