cocos2dx 對全部動作或單個動作速度的改變

一、對全部CCActionInterval動作進行加速或減速,這個很簡單隻要一句代碼就可以。

  1. CCDirector::sharedDirector()->getScheduler()->setTimeScale(2);//以目前2倍速度播放  
  2.     CCDirector::sharedDirector()->getScheduler()->setTimeScale(0.5);//以目前0.5倍速度播放  

二、對個別單個動作進行加速或減速

有兩種方法

1.通過CCSpeed實現

  1. CCSprite* sprite = CCSprite::create();  
  2.     CCActionInterval *jump = CCJumpBy::create(4, ccp(0,0), 100, 4);  
  3.     sprite->runAction(CCSpeed::create(jump, 2));//以2倍速度播放動作  


2.通過CCActionManager實現,着重講這個方法

  1. CCScheduler* scheduler1;  
  2. void HelloWorld::myInit11()  
  3. {  
  4.     CCSize size = CCDirector::sharedDirector()->getWinSize();  
  5.       
  6.     CCControlSlider* slider1 = CCControlSlider::create("sliderTrack.png""sliderProgress.png""sliderThumb.png");  
  7.     slider1->setPosition(ccp(size.width/4*2, size.height*0.3));  
  8.     this->addChild(slider1);  
  9.     slider1->setTag(1);  
  10.     //最小值  
  11.     slider1->setMinimumValue(0);  
  12.     //最大值  
  13.     slider1->setMaximumValue(5);  
  14.     //回調函數  
  15.     slider1->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::sliderAction), CCControlEventValueChanged);  
  16.       
  17.       
  18.     // Create a new scheduler, and link it to the main scheduler  
  19.     scheduler1 = new CCScheduler();  
  20.     CCDirector::sharedDirector()->getScheduler()->scheduleUpdateForTarget(scheduler1, 0, false);  
  21.       
  22.     // Create a new ActionManager, and link it to the new scheudler  
  23.     CCActionManager* actionManager1 = new CCActionManager();  
  24.     scheduler1->scheduleUpdateForTarget(actionManager1, 0, false);  
  25.       
  26.       
  27.     //左邊精靈  
  28.     CCActionInterval *jump1 = CCJumpBy::create(4, ccp(0,0), 100, 4);  
  29.     CCActionInterval *jump2 = jump1->reverse();  
  30.     CCSequence* seq = CCSequence::create(jump2, jump1, NULL);  
  31.     CCRepeatForever* action = CCRepeatForever::create(seq);  
  32.       
  33.     CCSprite* left = CCSprite::create("Icon.png");  
  34.     left->setPosition(ccp(size.width/4*1, size.height*0.5));  
  35.     this->addChild(left);  
  36.     // IMPORTANT: Set the actionManager running any action  
  37.     left->setActionManager(actionManager1);  
  38.     left->runAction(action);  
  39.       
  40.       
  41.     //中間精靈  
  42.     CCSprite* middle = CCSprite::create("Icon.png");  
  43.     middle->setPosition(ccp(size.width/4*2, size.height*0.5));  
  44.     this->addChild(middle);  
  45.     middle->setActionManager(actionManager1);  
  46.     middle->runAction(CCRepeatForever::create(CCRotateBy::create(2, 360)));  
  47.       
  48.       
  49.     //右邊精靈  
  50.     CCSprite* right = CCSprite::create("Icon.png");  
  51.     right->setPosition(ccp(size.width/4*3, size.height*0.5));  
  52.     this->addChild(right);  
  53.     CCActionInterval* scale1 = CCScaleBy::create(1, 2);  
  54.     CCActionInterval* scale2 = scale1->reverse();  
  55.     CCSequence* seq2 = CCSequence::create(scale1, scale2, NULL);  
  56.     CCRepeatForever* action2 = CCRepeatForever::create(seq2);  
  57.     right->setActionManager(actionManager1);  
  58.     right->runAction(action2);  
  59. }  
  60.   
  61. void HelloWorld::sliderAction(CCObject* pSender, CCControlEvent controlEvent)  
  62. {  
  63.     CCControlSlider* pSliderCtl = (CCControlSlider*)pSender;  
  64.     float value = pSliderCtl->getValue();  
  65.       
  66.     scheduler1->setTimeScale(value);  
  67. }  
  68.   
  69. HelloWorld::~HelloWorld()  
  70. {  
  71.     scheduler1->release();  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章