我正在学习cocos2D-x并正在做一些精灵动画 我的目标是当单击一个按钮时,对象会向左移动一些动画。 现在,如果你快速点击多次,动画就会立即发生,看起来熊似乎希望而不是走路。
对它的解决方案看起来很简单,我应该检查动画是否已经在运行以及是否应该运行新动画。
以下是我的代码的一部分。
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("AnimBear.plist");
CCSpriteBatchNode* spriteBatchNode = CCSpriteBatchNode::create("AnimBear.png", 8);
this->addChild(spriteBatchNode,10);
CCArray *tempArray = new CCArray();
char buffer[15];
for (int i = 1; i <= 8 ; i++)
{
sprintf(buffer,"bear%i.png", i);
tempArray->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(buffer));
}
CCAnimation *bearWalkingAnimation = CCAnimation::create(tempArray,0.1f);
startAnimation = CCSprite::createWithSpriteFrameName("bear1.png");
startAnimation->setPosition(ccp (350 , CCDirector::sharedDirector()->getWinSize().height/2 -100));
startAnimation->setScale(0.5f);
startAnimation->setTag(5);
//Animation for bear walking
bearAnimate = CCAnimate::create(bearWalkingAnimation);
这里bearAnimate是一个全局变量,我想知道它当前是否在播放动画。
我该怎么做。?谢谢。
答案 0 :(得分:14)
假设运行该操作的Sprite是
CCSprite* bear;
我认为你可以使用像
这样的东西bear->numberOfRunningActions()
numberOfRunningActions( )
返回一个无符号整数,因此要检查是否没有操作,您必须检查它是否返回0
if ( bear -> numberOfRunningActions( ) == 0 ) {
CCLOG( "No actions running." );
} else {
CCLOG( "Actions running." );
}
答案 1 :(得分:1)
bearAnimate(CCAnimate)有一个检查它的方法。
if (bearAnimate.isDone())
doWhatYouWant();
该方法继承自CCAction。祝你好运。