在Cocos2d-x裏面能夠經過CCActionManger類來管理動做的暫停和恢復,CCActionMessage是管理全部Action的單例,通常狀況下並不直接使用這個單例,而是使用CCNode的接口,可是假如你想操做的目標不是CCNode的子類或者你想暫停/恢復動做就要使用到CCActionMessager。動畫
CCActionManger類是一個單例模式的類來的,咱們能夠經過下面的方式來獲取動做管理類的實例:this
CCDirector* pDirector = CCDirector::sharedDirector();
pDirector->getActionManager()->resumeTarget(pGrossini);spa
那麼在使用CCActionManger類來管理動做的暫停的邏輯必須放在在onEnter()方法裏面,不然將不會起做用。3d
下面演示當點擊屏幕的時候,先暫停3秒鐘,而後再播放動畫:code
class ResumeTest : public cocos2d::CCLayer { public: ResumeTest(); ~ResumeTest(); virtual void onEnter(); void resumeCat(float time); }; void ResumeTest::onEnter() { CCLayer::onEnter(); CCSize size = CCDirector::sharedDirector()->getWinSize(); CCSprite* pGrossini = CCSprite::create("cat.png"); addChild(pGrossini, 0, 1); pGrossini->setPosition( ccp(size.width * 0.5, size.height * 0.5) ); pGrossini->runAction(CCScaleBy::create(5, 3)); CCDirector* pDirector = CCDirector::sharedDirector(); //暫停目標精靈的動做 pDirector->getActionManager()->pauseTarget(pGrossini); pGrossini->runAction(CCRotateBy::create(10, 360)); this->schedule(schedule_selector(ResumeTest::resumeCat), 3.0f); } void ResumeTest::resumeCat(float time) { this->unschedule(schedule_selector(ResumeTest::resumeCat)); CCNode* pGrossini = getChildByTag(1); CCDirector* pDirector = CCDirector::sharedDirector(); //運行目標精靈的動做 pDirector->getActionManager()->resumeTarget(pGrossini); }
在helloworld頁面添加點擊事件的處理:blog
void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event) { CCScene * scene = new CCScene(); CCLayer* pLayer =new ResumeTest(); scene->addChild(pLayer); CCDirector::sharedDirector()->replaceScene(scene); scene->autorelease(); }
運行的效果:接口