[Cocos2d-x For WP8]ActionManager动作管理
在Cocos2d-x里面可以通过CCActionManger类来管理动作的暂停和恢复,CCActionMessage是管理所有Action的单例,一般情况下并不直接使用这个单例,而是使用CCNode的接口,但是假如你想操作的目标不是CCNode的子类或者你想暂停/恢复动作就要使用到CCActionMessager。
CCActionManger类是一个单例模式的类来的,我们可以通过下面的方式来获取动作管理类的实例:
CCDirector* pDirector = CCDirector::sharedDirector();
pDirector->getActionManager()->resumeTarget(pGrossini);
那么在使用CCActionManger类来管理动作的暂停的逻辑必须放在在onEnter()方法里面,否则将不会起作用。
下面演示当点击屏幕的时候,先暂停3秒钟,然后再播放动画:
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页面添加点击事件的处理:
void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event) { CCScene * scene = new CCScene(); CCLayer* pLayer =new ResumeTest(); scene->addChild(pLayer); CCDirector::sharedDirector()->replaceScene(scene); scene->autorelease(); }
运行的效果: