2012-09-25 9 views
6

Actualmente estoy aprendiendo cocos2D-x y estoy haciendo algo de animación de sprites.
Mi objetivo es que cuando se hace clic en un botón, el objeto se mueve hacia la izquierda con algo de animación. Ahora, si hace clic varias veces rápidamente, la animación se lleva a cabo de inmediato y parece que el oso espera en lugar de caminar.Comprobar si la animación se está ejecutando en cocos2d-x

La solución parece sencilla: debo comprobar si la animación ya se está ejecutando y si no debe ejecutarse la nueva animación.

La siguiente es una parte de mi código.

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

Aquí bearAnimate es una variable global y deseo saber si se está reproduciendo actualmente la animación.

¿Cómo lo hago?
Gracias.

Respuesta

13

asumir el Sprite que se ejecuta la acción es

CCSprite* bear; 

Creo que se puede usar algo como

bear->numberOfRunningActions() 

numberOfRunningActions() devuelve un entero sin signo, por lo que para comprobar si no hay acciones, lo haría tiene que comprobar si devuelve 0

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

@LanceGray: ¡Gracias amigo! –

+0

¿Sabrías cómo es en cocos2d regular? – RollRoll

+1

@ThePoet Creo que la función es la misma? –

1

BearAnimate (CCAnimate) tiene un método para verificar eso.

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

El método se hereda de CCAction. Buena suerte.

Cuestiones relacionadas