天天看點

cocos2d對動畫的各種操作

關于動畫的各種操作,總結一下以便以後複習查找。

内容簡要:

1、瞬時動作2、延時動作        3、 組合動作 4、動畫

5、速度變化6、函數調用 7、建立動作動畫8、控制動畫幀的速度

瞬時動作:瞬時動作的基類是InstantAction

1、放置位置

  CGPoint p = ccp(width,height); 

  [sprite runAction:[CCPlace actionWithPosition:p]]; 

2、隐藏

  [sprite runAction:[CCHide action]];

3、顯示

  [sprite runAction:[CCShow action]];

(效果類似亍 [node  setVisible:YES]. 之是以作為一個劢作來實作是為了可以不其

他劢作形成一個連續劢作)

4、可見切換

  [sprite runAction:[CCToggleVisibility action]]; 

延時動作:延時動作的基類是CCIntervalAction

  函數命名規則:

XxxxTo: 意味着運劢到指定癿位置。 

XxxxBy:意味着運劢到按照指定癿x、y增量癿位置。(x、y可以是負值) 

1、移動到 – CCMoveTo 

2、移動– CCMoveBy 

3、跳躍到 – CCJumpTo 設定終點位置和跳躍癿高度和次數。

4、跳躍 – CCJumpBy  設定終點位置和跳躍癿高度和次數。

5、貝塞爾 – CCBezierBy 支援3次貝塞爾曲線:P0-起點,P1-起點切線方向,P2-終 點切線方向,P3-終點。 首先設定定Bezier參數,然後執行。

6、放大到 – CCScaleTo 設定放大倍數,是浮點型。 

7、放大 – CCScaleBy 

8、旋轉到 – CCRotateTo 

9、旋轉 – CCRotateBy 

10、閃爍 – CCBlink 設定閃爍次數

11、色調變化到 – CCTintTo 

12、色調變換 – CCTintBy 

13、變暗到 – CCFadeTo 

14、由無變亮 – CCFadeIn 

15、由亮變無 – CCFadeOut

組合動作:

1、序列-CCSequence

// 建立5個劢作 

  id ac0 = [sprite runAction:[CCPlace actionWithPosition:p]]; 

  id ac1 = [CCMoveTo actionWithDuration:2 position:ccp(50,50)]; 

  id ac2 = [CCJumpTo actionWithDuration:2 position:ccp(150,50) height:30 jumps:5]; 

  id ac3 = [CCBlink actionWithDuration:2 blinks:3]; 

  id ac4 = [CCTintBy actionWithDuration:0.5 red:0 green:255 blue:255]; 

  //将5個劢作組合為一個序列,注意丌要忘了用nil結尾。 

  [sprite runAction:[CCSequence actions:ac0, ac1, ac2, ac3, ac4, ac0, nil]]; 

2、同步-Spawn

  // 同步 劢作群組合劢作 以形成一個連續癿新劢作

  [sprite runAction:[CCSpawn actions:ac1, ac2, seq, nil]]; 

3、重複有限次數 -Repeate

  // 建立劢作序列 

  id ac1 = [CCMoveTo actionWithDuration:2 position:ccp( 50,50)]; 

  id ac2 = [CCJumpBy actionWithDuration:2 position:ccp(-400, -200) height:30 jumps:5]; 

  id ac3 = [CCJumpBy actionWithDuration:2 position:ccp(2, 0) height:20 jumps:3]; 

  id seq = [CCSequence actions:ac1, ac2, ac3, nil];  

  //  重複運作上述劢作序列3次。 

  [sprite runAction:[CCRepeat actionWithAction:seq times:3]];

4、反動作-Reverse

反動作就是反向(逆向)執行某個動作,支援針對動作序列癿反劢作序列。反動作

不是一個與門的類,而是CCFiniteAction引入的一個接口。不是所有的類都支援

反動作,XxxxTo類通常不支援反動作,XxxxBy類通常支援。

id ac1 = [CCMoveBy actionWithDuration:2 position:ccp(190,220)];

// 建立某個動作的反動作。   

id ac2 = [ac1 reverse];   

[sprite runAction:[CCRepeat actionWithAction:[CCSequence actions:ac1, ac2,nil] times:2]]; 

動畫-Animation

CCAnimation *animation = [AtlasAnimation animationWithName:@"flight" delay:0.2f]; 

  // 每幀癿内容定義。 

  for(int i=0;i<3;i++) { 

    int x= i % 3; 

    [animation addFrameWithRect: CGRectMake(x*32, 0, 31, 30) ]; 

  }     

  // 執行劢畫效果 

  id action = [CCAnimate actionWithAnimation: animation]; 

  [sprite runAction:[CCRepeat actionWithAction:action times:10]];

無限重複 - RepeatForever

// 将該動畫作為精靈的本征動畫,一直運作。 

  [sprite runAction:[RepeatForever actionWithAction:action]]; 

速度變化

1、EaseIn 由慢至快。 

2、EaseOut 由快至慢 

3、EaseInOut 由慢至快再由快至慢。 

4、EaseSineIn 由慢至快。

5、EaseSineOut 由快至慢 

6、EaseSineInOut 由慢至快再由快至慢。 

7、EaseExponentialIn 由慢至極快。 

8、EaseExponentialOut 由極快至慢。 

9、EaseExponentialInOut 由慢至極快再由極快至慢。 

10、Speed 人工設定速度,還可通過SetSpeed不斷調整。

延時動作 - Delay

id ac1 = [CCMoveBy actionWithDuration:2 position:ccp(200, 200)]; 

id ac2 = [ac1 reverse]; 

// 實作一個等待間歇 

[sprite  runAction:[Sequence  actions:ac1,  [DelayTime actionWithDuration:1], ac2, nil]];

函數調用

  id ac1 = [CCMoveBy actionWithDuration:2 position:ccp(200, 200)]; 

  id ac2 = [ac1 reverse]; 

  id acf = [CCCallFunc actionWithTarget:self selector:@selector(CallBack1)]; 

   [sprite runAction:[CCSequence actions:ac1, acf, ac2, nil]];

1、帶對象參數

id acf = [CallFuncN actionWithTarget:self selector:@selector(CallBack2:)];

- (void) CallBack2:(id)sender;

2、帶對象、資料參數

id acf = [CCCallFuncND actionWithTarget:self selector:@selector(CallBack3:data:) data:(void*)2];

-(void) CallBack3:(id)sender data:(void*)data;

建立動作

1、利用檔案名

CCAnimation*anim=[CCAnimationanimationWithFile:@"Jun"frameCount:12delay:0.1]; 

CCAnimate* animate = [CCAnimate actionWithAnimation:anim];

CCSequence *seq = [CCSequence actions:animate,nil]; 

CCRepeatForever* repeat = [CCRepeatForever actionWithAction:seq];

[sprite runAction:repeat];

2、利用緩存

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Jun.plist"];      

anim=[CCAnimation animationWithFrame:@"Jun" frameCount:12 delay:0.1]; 

animate = [CCAnimate actionWithAnimation:anim];

seq = [CCSequence actions:animate,nil]; 

repeat = [CCRepeatForever actionWithAction:seq];

[sprite runAction:repeat]; 

控制動作的速度

1、建立

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Jun.plist"];

CCSprite*sprite=[CCSprite spriteWithSpriteFrameName:@"Jun1.png"];

sprite.position=ccp(200,200);

[self addChild:sprite]; 

CCAnimation*anim=[CCAnimation animationWithFrame:@"Jun" frameCount:12 delay:0.1]; 

//動作放入speed中

CCSpeed *speed =[CCSpeed actionWithAction:[CCRepeatForever actionWithAction:seq] speed:1.0f];

[speed setTag:66];

[Sprite runAction:speed];