2012-09-25 15 views
6

Obecnie uczę się cocos2D-x i robię animację sprite.
Mój cel polega na tym, że po kliknięciu przycisku obiekt przesuwa się w lewo z animacją. Teraz, jeśli szybko klikniesz kilka razy, animacja nastąpi natychmiast i wygląda na to, że niedźwiedź ma nadzieję, że zamiast chodzić.Sprawdź, czy animacja działa w cocos2d-x

Rozwiązaniem tego problemu jest proste sprawdzenie, czy animacja jest już uruchomiona i czy nowa animacja nie powinna mieć miejsca.

Poniżej znajduje się część mojego kodu.

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); 

Tutaj bearAnimate jest zmienną globalną i chcę się dowiedzieć, czy aktualnie odtwarza animację.

Jak to zrobić?
Dziękuję.

Odpowiedz

13

Załóżmy, Sprite, która prowadzi działania jest

CCSprite* bear; 

myślę, że można użyć coś jak

bear->numberOfRunningActions() 

numberOfRunningActions() zwraca liczbę całkowitą bez znaku, tak aby sprawdzić, czy nie ma żadnych działań, byś należy sprawdzić, czy zwraca ona 0

if (bear -> numberOfRunningActions() == 0) { 
    CCLOG("No actions running."); 
} else { 
    CCLOG("Actions running."); 
} 
+0

@LanceGray: Dzięki kolego! –

+0

Czy wiesz, jak to jest w regularnym cocos2d? – RollRoll

+1

@ ThePoet Myślę, że funkcja jest taka sama? –

1

BearAnimate (CCAnimate) ma metodę sprawdzenia tego.

if (bearAnimate.isDone()) 
    doWhatYouWant(); 

Metoda jest dziedziczona z CCAction. Powodzenia.

Powiązane problemy