cocos2d-x 自帶動畫


聲明:博文內容為自己整理筆記所用,有不對的地方還請大家指正.

在cocos2dx 中的tests 項目里 已經帶了 足夠多的 動畫事例 

ActionsTest

我只是看了其中一些 自我感覺比較常用的動畫

ActionMove   移動

在cocos2d-x中移動分  to  和   by   兩種

1     CCSize s = CCDirector::sharedDirector()->getWinSize();
2 
3     CCActionInterval*  actionTo = CCMoveTo::create(2, CCPointMake(s.width-40, s.height-40));    //2s的時間移動到某個位置相對於屏幕
4     CCActionInterval*  actionBy = CCMoveBy::create(2, CCPointMake(80,80));                        //2s的時間移動到80,80
5     CCActionInterval*  actionByBack = actionBy->reverse();                                        //讓動作回復到actionBy之前的地方
6 
7     m_tamara->runAction( actionTo);                                                                //執行actionTo
8     m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));                    //順序執行(actionBy,actionByBack),必須用NULL結尾
9     m_kathia->runAction(CCMoveTo::create(1, CCPointMake(40,40)));                                //1s的時間移動到40,40

 ActionScale  縮放

同樣分為 to 和 by 記得有地方說這兩種縮放  效果會不一樣  但是我在win32 上實驗   縮放大小是一樣的,以后在到xcode 上實驗

1     CCActionInterval*  actionTo = CCScaleTo::create(2.0f, 0.5f);                        //2個參數(時間,放大倍數)
2     CCActionInterval*  actionBy = CCScaleBy::create(2.0f, 1.0f, 10.0f);                 //三個參數(時間,x方向放大倍數,y方向放大倍數)
3     CCActionInterval*  actionBy2 = CCScaleBy::create(2.0f, 5.0f, 1.0f);                    
4 
5     m_grossini->runAction( actionTo);                                                
6     m_tamara->runAction( CCSequence::create(actionBy, actionBy->reverse(), NULL));        
7     m_kathia->runAction( CCSequence::create(actionBy2, actionBy2->reverse(), NULL));    

ActionSkew

還沒研究 暫時留在這里

 1     CCActionInterval *actionTo = CCSkewTo::create(2, 37.2f, -37.2f);
 2     CCActionInterval *actionToBack = CCSkewTo::create(2, 0, 0);
 3     CCActionInterval *actionBy = CCSkewBy::create(2, 0.0f, -90.0f);
 4     CCActionInterval *actionBy2 = CCSkewBy::create(2, 45.0f, 45.0f);
 5     CCActionInterval *actionByBack = actionBy->reverse();
 6 
 7     m_tamara->runAction(CCSequence::create(actionTo, actionToBack, NULL));
 8     m_grossini->runAction(CCSequence::create(actionBy, actionByBack, NULL));
 9 
10     m_kathia->runAction(CCSequence::create(actionBy2, actionBy2->reverse(), NULL));

ActionRotate

 旋轉

 1     CCActionInterval*  actionTo = CCRotateTo::create( 2, 45);                        //2s內順時針旋轉45度(每跨度180,旋轉方向會相反)
 2     CCActionInterval*  actionTo2 = CCRotateTo::create( 2, -45);                        //2s內逆時針旋轉45度(每跨度180,旋轉方向會相反)
 3     CCActionInterval*  actionTo0 = CCRotateTo::create(2 , 0);
 4     m_tamara->runAction( CCSequence::create(actionTo, actionTo0, NULL));
 5 
 6     CCActionInterval*  actionBy = CCRotateBy::create(2 ,  360);                        //2s內自身旋轉360度,正數為順時針旋轉,負數相反
 7     CCActionInterval*  actionByBack = actionBy->reverse();                            //回復
 8     m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));        
 9 
10     m_kathia->runAction( CCSequence::create(actionTo2, actionTo0->copy()->autorelease(), NULL));
11     //actionTo0->copy()->autorelease()  不清楚  作用 

ActionJump

跳動移動

1     CCActionInterval*  actionTo = CCJumpTo::create(2, CCPointMake(300,300), 50, 4);        //2s內跳向300,300的位置,跳躍高度為50,跳躍次數為4
2     CCActionInterval*  actionBy = CCJumpBy::create(2, CCPointMake(300,0), 50, 4);        //向x方向跳動300像素,跳躍高度為50,跳躍次數為4
3     CCActionInterval*  actionUp = CCJumpBy::create(2, CCPointMake(0,0), 80, 4);            //原地跳動 高度80 次數為4
4     CCActionInterval*  actionByBack = actionBy->reverse();                                //回復
5 
6     m_tamara->runAction( actionTo);
7     m_grossini->runAction( CCSequence::create(actionBy, actionByBack, NULL));            //順序執行actionBy, actionByBack動作
8     m_kathia->runAction( CCRepeatForever::create(actionUp));                            //CCRepeatForever  一直重復相同的動作

順序執行和並發執行

 1     CCMoveTo *moveTo = CCMoveTo::actionWithDuration(5, ccp(150,250));
 2     CCScaleTo *scaleTo = CCScaleTo::actionWithDuration(5, 3);
 3     CCDelayTime *waiting = CCDelayTime::actionWithDuration(2);//停滯2秒
 4     CCRotateBy *rotBy = CCRotateBy::actionWithDuration(5, 180);
 5     //順序執行定義好的動畫
 6     _sprite1->runAction(CCSequence::actions(moveTo,waiting,scaleTo,waiting,rotBy,NULL));
 7     //並發執行(同時執行)各類動畫
 8     _sprite2->runAction(CCSpawn::actions(moveTo,scaleTo,rotBy));
 9     //一直重復相同的動作
10     _sprite3->runAction(CCRepeatForever::actionWithAction(rotBy));

  _sprite->stopAction(scale);//停住某個action,只能停止單個動畫,在組合動畫中不能停住

 

帶有回調方法的移動

ActionCallFunc   無參回調

 1 void ActionCallFunc::onEnter()
 2 {
 3     ActionsDemo::onEnter();
 4 
 5     centerSprites(3);
 6 
 7     CCFiniteTimeAction*  action = CCSequence::create(
 8         CCMoveBy::create(2, CCPointMake(200,0)),
 9         CCCallFunc::create(this, callfunc_selector(ActionCallFunc::callback1)), 
10         NULL);
11 
12     CCFiniteTimeAction*  action2 = CCSequence::create(
13         CCScaleBy::create(2 ,  2),
14         CCFadeOut::create(2),
15         CCCallFuncN::create(this, callfuncN_selector(ActionSequence2::callback2)), 
16         NULL);
17 
18     CCFiniteTimeAction*  action3 = CCSequence::create(
19         CCRotateBy::create(3 , 360),
20         CCFadeOut::create(2),
21         CCCallFuncND::create(this, callfuncND_selector(ActionSequence2::callback3), (void*)0xbebabeba), 
22         NULL);
23 
24     m_grossini->runAction(action);
25     m_tamara->runAction(action2);
26     m_kathia->runAction(action3);
27 }
28 
29 
30 void ActionCallFunc::callback1()
31 {
32     CCSize s = CCDirector::sharedDirector()->getWinSize();
33     CCLabelTTF *label = CCLabelTTF::create("callback 1 called", "Marker Felt", 16);
34     label->setPosition(CCPointMake( s.width/4*1,s.height/2));
35 
36     addChild(label);
37 }
38 
39 void ActionCallFunc::callback2(CCNode* pSender)
40 {
41     CCSize s = CCDirector::sharedDirector()->getWinSize();
42     CCLabelTTF *label = CCLabelTTF::create("callback 2 called", "Marker Felt", 16);
43     label->setPosition(CCPointMake( s.width/4*2,s.height/2));
44 
45     addChild(label);
46 }
47 
48 void ActionCallFunc::callback3(CCNode* pTarget, void* data)
49 {
50     CCSize s = CCDirector::sharedDirector()->getWinSize();
51     CCLabelTTF *label = CCLabelTTF::create("callback 3 called", "Marker Felt", 16);
52     label->setPosition(CCPointMake( s.width/4*3,s.height/2));
53     addChild(label);
54 }
55    

 

有參數的回調

 1 void ActionCallFuncND::onEnter()
 2 {
 3     ActionsDemo::onEnter();
 4 
 5     centerSprites(1);
 6 
 7     CCFiniteTimeAction* action = CCSequence::create(CCMoveBy::create(2.0f, ccp(200,0)),
 8         CCCallFuncND::create(this, callfuncND_selector(ActionCallFuncND::removeFromParentAndCleanup), (void*)true),
 9         NULL);
10 
11     m_grossini->runAction(action);
12 }
13 
14 std::string ActionCallFuncND::title()
15 {
16     return "CallFuncND + auto remove";
17 }
18 
19 std::string ActionCallFuncND::subtitle()
20 {
21     return "CallFuncND + removeFromParentAndCleanup. Grossini dissapears in 2s";
22 }
23 
24 void ActionCallFuncND::removeFromParentAndCleanup(CCNode* pSender, void* data)
25 {
26     bool bCleanUp = (bool)data;
27     m_grossini->removeFromParentAndCleanup(bCleanUp);
28 }

 其他動畫可以在tests里自行查找

cocos2d-x提供豐富的動畫

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM