cocos2d里的各种动作(转载)
2011-04-29 16:29
423 查看
通常调用某个动作的方法:
瞬时动作
顾名思义。瞬时动作就是不需要时间,马上就完成的动作。瞬时动作的共同基类是InstantAction。
放置–Place
效果类似于node.Position=ccp(x,y)。之所以作为一个动作来实现是为了可以与其他动作形成一个连续动作。
示例:
隐藏–Hide
效果类似于[nodesetVisible:NO].
示例:
显示–Show
效果类似于[nodesetVisible:YES].
示例:
可见切换–ToggleVisibility
代码如下:
[b]延时动作[/b]
延时动作就是动作的完成需要一定时间。因此,actionWithDuration是延时动作执行时的第一个参数,延时动作的共同基类是CCIntervalAction。
函数的命名规则:
***To:意味着运动到指定的位置。
***By:意味着运动到按照指定癿x、y增量的位置。(x、y可以是负值)
移动到–CCMoveTo
[b]移动–CCMoveBy[/b]
跳跃到–CCJumpTo
设置终点位置和跳跃癿高度和次数。
跳跃–CCJumpBy
设置终点位置和跳跃癿高度和次数。
贝塞尔–CCBezierBy
支持3次贝塞尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。
首先设置定Bezier参数,然后执行。
放大到–CCScaleTo
设置放大倍数,是浮点型。
放大–CCScaleBy
旋转到–CCRotateTo
旋转–CCRotateBy
闪烁–CCBlink
设定闪烁次数
色调变化到–CCTintTo
色调变换–CCTintBy
变暗到–CCFadeTo
由无变亮–CCFadeIn
由亮变无–CCFadeOut
[b]组合动作[/b]
按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作。组合动作包括以下几类:
序列–CCSequence
主要作用就是线序排列若干个动作,然后按先后次序逐个执行。
同步–SpawnSpawn
作用就是同时并列执行若干个动作,但要求动作都必须是可以同时执行的。比如:移动式翻转、变色、变大小等。
需要特别注意的是,同步执行最后的完成时间由基本动作中用时最大者决定。
重复有限次数–Repeate
重复有限的次数的动作示例代码如下:
viewsourceprint?
反动作–Reverse
反动作就是反向(逆向)执行某个动作,支持针对动作序列的反动作序列。反动作不是一个专门的类,而是CCFiniteAction引入的一个接口。不是所有的类都支持反动作,XxxxTo类通常不支持反动作,XxxxBy类通常支持。示例如下:
viewsourceprint?
动画–Animation
动画就是让精灵自身的连续执行一段影像,形成模拟运动的效果:行走时动精灵状态、打斗时的状态等。
viewsourceprint?
无限重复–RepeatForever
RepeatForever是从Action类直接派生的,因此无法参于序列和同步;自身也无法反向执行。该类的作用就是无限期执行某个动作或动作序列,直到被停止。
viewsourceprint?
[b]速度变化[/b]
基本动作和组合动作实现了针对精灵的各种运动、动画效果的改变,但这样的改变的速度是不变的,通过CCEaseAction为基类的类系和CCSpeed类我们可以很方便的修改精灵执行动作的速度:由快至慢还是由慢至快
EaseIn由慢至快。
EaseOut由快至慢
EaseInOut由慢至快再由快至慢。
EaseSineIn由慢至快
EaseSineOut由快至慢
EaseSineInOut由慢至快再由快至慢。
EaseExponentialIn由慢至极快。
EaseExponentialOut由极快至慢。
EaseExponentialInOut由慢至极快再由极快至慢。
Speed人工设定速度,还可通过SetSpeed不断调整。
[b]扩展动作[/b]
我们已经掌握了执行各种各样的动作,也可以按照不同的快慢修改动作执行的时间,Cocos2D-iPhone还提供了针对现有动作的扩展,以实现各种灵活的效果。
延时动作–Delay
在动作序列中增加一个时间间歇:
viewsourceprint?
函数调用函数
在动作序列中间或者结束调用某个函数,执行任何需要执行的任务:动作、状态修改等。代码如下:
viewsourceprint?
对应的函数为:(再做一个动作,这就实现了动作、动作序列的任意扩展和连接)
viewsourceprint?
带对象参数调用自定义函数时,传递当前对象。
viewsourceprint?
对应的自定义函数:(这里,我们直接使用了该对象)
viewsourceprint?
带对象、数据参数调用自定义函数时,传递当前对象和一个常量(也可以是指针)。
viewsourceprint?
对应的自定义函数,我们使用了传递的对象和数据:
viewsourceprint?
1 | //创建动作 |
2 | id actionTo=[CCMoveToactionWithDuration:2position:ccp(s.width-40,s.height-40)]; |
3 |
4 | //使用动作。(说明:tamara是一个CCSprite。) |
5 | [tamararunAction:actionTo]; |
顾名思义。瞬时动作就是不需要时间,马上就完成的动作。瞬时动作的共同基类是InstantAction。
放置–Place
效果类似于node.Position=ccp(x,y)。之所以作为一个动作来实现是为了可以与其他动作形成一个连续动作。
示例:
1 | -( void )OnPlaceMenue:( id )sender{ |
2 | CGSizes=[[CCDirectorsharedDirector]winSize]; |
3 | CGPointp=ccp(CCRANDOM_0_1()*s.width,CCRANDOM_0_1()*s.height); |
4 | [spriterunAction:[CCPlaceactionWithPosition:p]]; |
5 | } |
效果类似于[nodesetVisible:NO].
示例:
1 | -( void )OnHideMenue:( id )sender{ |
2 | [spriterunAction:[CCHideaction]]; |
3 | } |
效果类似于[nodesetVisible:YES].
示例:
1 | -( void )OnShowMenue:( id )sender{ |
2 | [spriterunAction:[CCShowaction]]; |
3 | } |
代码如下:
1 | -( void )OnToggleMenue:( id )sender{ |
2 | [spriterunAction:[CCToggleVisibilityaction]]; |
3 | } |
延时动作就是动作的完成需要一定时间。因此,actionWithDuration是延时动作执行时的第一个参数,延时动作的共同基类是CCIntervalAction。
函数的命名规则:
***To:意味着运动到指定的位置。
***By:意味着运动到按照指定癿x、y增量的位置。(x、y可以是负值)
移动到–CCMoveTo
[b]移动–CCMoveBy[/b]
跳跃到–CCJumpTo
设置终点位置和跳跃癿高度和次数。
跳跃–CCJumpBy
设置终点位置和跳跃癿高度和次数。
贝塞尔–CCBezierBy
支持3次贝塞尔曲线:P0-起点,P1-起点切线方向,P2-终点切线方向,P3-终点。
首先设置定Bezier参数,然后执行。
放大到–CCScaleTo
设置放大倍数,是浮点型。
放大–CCScaleBy
旋转到–CCRotateTo
旋转–CCRotateBy
闪烁–CCBlink
设定闪烁次数
色调变化到–CCTintTo
色调变换–CCTintBy
变暗到–CCFadeTo
由无变亮–CCFadeIn
由亮变无–CCFadeOut
[b]组合动作[/b]
按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作。组合动作包括以下几类:
序列–CCSequence
主要作用就是线序排列若干个动作,然后按先后次序逐个执行。
01 | -( void )OnSequence:( id )sender{ |
02 | CGSizes=[[CCDirectorsharedDirector]winSize]; |
03 | CGPointp=ccp(s.width/2,50); |
04 | //创建5个动作 |
05 | id ac0=[spriterunAction:[CCPlaceactionWithPosition:p]]; |
06 | id ac1=[CCMoveToactionWithDuration:2position:ccp(s.width-50,s.height-50)]; |
07 | id ac2=[CCJumpToactionWithDuration:2position:ccp(150,50)height:30jumps:5]; |
08 | id ac3=[CCBlinkactionWithDuration:2blinks:3]; |
09 | id ac4=[CCTintByactionWithDuration:0.5red:0green:255blue:255]; |
10 | //将5个动作组合为一个序列,注意不要忘了用nil结尾。 |
11 | [spriterunAction:[CCSequenceactions:ac0,ac1,ac2,ac3,ac4,ac0, nil ]]; |
12 | } |
作用就是同时并列执行若干个动作,但要求动作都必须是可以同时执行的。比如:移动式翻转、变色、变大小等。
需要特别注意的是,同步执行最后的完成时间由基本动作中用时最大者决定。
01 | -( void )OnSpawn:( id )sender{ |
02 | CGSizes=[[CCDirectorsharedDirector]winSize]; |
03 | CGPointp=ccp(s.width/2,50); |
04 | sprite.rotation=0; |
05 | [spritesetPosition:p]; |
06 | //创建4个需要并行的动作,确保动作用时可组合。2–2-(1+1) |
07 | id ac1=[CCMoveToactionWithDuration:2position:ccp(s.width-50,s.height-50)]; |
08 | id ac2=[CCRotateToactionWithDuration:2angle:180]; |
09 | id ac3=[CCScaleToactionWithDuration:1scale:4]; |
10 | id ac4=[CCScaleByactionWithDuration:1scale:0.5]; |
11 | id seq=[CCSequenceactions:ac3,ac4, nil ]; |
12 | //同步动作和组合动作以形成一个连续的新动作。 |
13 | [spriterunAction:[CCSpawnactions:ac1,ac2,seq, nil ]]; |
14 | } |
重复有限的次数的动作示例代码如下:
01 | -( void )OnRepeat:( id )sender{ |
02 | CGSizes=[[CCDirectorsharedDirector]winSize]; |
03 | CGPointp=ccp(s.width/2,50); |
04 | sprite.rotation=0; |
05 | [spritesetPosition:p]; |
06 | //创建动作序列 |
07 | id ac1=[CCMoveToactionWithDuration:2position:ccp(s.width-50,s.height-50)]; |
08 | id ac2=[CCJumpByactionWithDuration:2position:ccp(-400,-200)height:30jumps:5]; |
09 | id ac3=[CCJumpByactionWithDuration:2position:ccp(s.width/2,0)height:20jumps:3]; |
10 | id seq=[CCSequenceactions:ac1,ac2,ac3, nil ]; |
11 | //重复运行上述劢作序列3次。 |
12 | [spriterunAction:[CCRepeatactionWithAction:seqtimes:3]]; |
13 | } |
反动作就是反向(逆向)执行某个动作,支持针对动作序列的反动作序列。反动作不是一个专门的类,而是CCFiniteAction引入的一个接口。不是所有的类都支持反动作,XxxxTo类通常不支持反动作,XxxxBy类通常支持。示例如下:
01 | -( void )OnReverse:( id )sender{ |
02 | CGSizes=[[CCDirectorsharedDirector]winSize]; |
03 | CGPointp=ccp(s.width/2,50); |
04 | sprite.rotation=0; |
05 | [spritesetPosition:p]; |
06 | id ac1=[CCMoveByactionWithDuration:2position:ccp(190,220)]; |
07 | //创建某个劢作癿反劢作。 |
08 | id ac2=[ac1reverse]; |
09 | [spriterunAction:[CCRepeatactionWithAction:[CCSequenceactions:ac1,ac2, nil ]times:2]]; |
10 | } |
动画就是让精灵自身的连续执行一段影像,形成模拟运动的效果:行走时动精灵状态、打斗时的状态等。
01 | -( void )OnAnimation:( id )sender{ |
02 | CCAnimation*animation=[AtlasAnimationanimationWithName:@ "flight" delay:0.2f]; |
03 | //每帧的内容定义。 |
04 | for ( int i=0;i<3;i++){ |
05 | int x=i%3; |
06 | [animationaddFrameWithRect:CGRectMake(x*32,0,31,30)]; |
07 | } |
08 | //执行劢画效果 |
09 | id action=[CCAnimateactionWithAnimation:animation]; |
10 | [spriterunAction:[CCRepeatactionWithAction:actiontimes:10]]; |
11 | } |
RepeatForever是从Action类直接派生的,因此无法参于序列和同步;自身也无法反向执行。该类的作用就是无限期执行某个动作或动作序列,直到被停止。
01 | -( void )OnRepeatForever:( id )sender{ |
02 | CGSizes=[[DirectorsharedDirector]winSize]; |
03 | CGPointp=ccp(100,50); |
04 | //飞行喷火模拟劢画 |
05 | CCAnimation*animation=[CCAnimationanimationWithName:@ "flight" delay:0.1f]; |
06 | for ( int i=0;i<3;i++) |
07 | { |
08 | int x=i%3; |
09 | [animationaddFrameWithRect:CGRectMake(x*32,0,31,30)]; |
10 | } |
11 | id action=[CCAnimateactionWithAnimation:animation]; |
12 | //将该动画作为精灵的本征动画,一直运行。 |
13 | [spriterunAction:[RepeatForeveractionWithAction:action]]; |
14 | //在创建第二个连续无限期动作序列。叠加二者形成完整效果。 |
15 | ccBezierConfigbezier; |
16 | sprite.rotation=0; |
17 | [spritesetPosition:p]; |
18 | bezier.startPosition=ccp(0,0); |
19 | bezier.controlPoint_1=ccp(0,s.height/2); |
20 | bezier.controlPoint_2=ccp(300,-s.height/2); |
21 | bezier.endPosition=ccp(300,100); |
22 | id ac10=[CCBezierByactionWithDuration:3bezier:bezier]; |
23 | id ac11=[CCTintByactionWithDuration:0.5red:0green:255blue:255]; |
24 | id ac1=[CCSpawnactions:ac10,[RepeatactionWithAction:ac11times:4], nil ]; |
25 | id ac2=[CCSpawnactions:[ac10reverse],[CCRepeatactionWithAction:ac11times:4], nil ]; |
26 | //第二个无限期连续运劢。 |
27 | [spriterunAction:[CCRepeatForeveractionWithAction:[CCSequenceactions:ac1,ac2, nil ]]]; |
28 | } |
基本动作和组合动作实现了针对精灵的各种运动、动画效果的改变,但这样的改变的速度是不变的,通过CCEaseAction为基类的类系和CCSpeed类我们可以很方便的修改精灵执行动作的速度:由快至慢还是由慢至快
EaseIn由慢至快。
EaseOut由快至慢
EaseInOut由慢至快再由快至慢。
EaseSineIn由慢至快
EaseSineOut由快至慢
EaseSineInOut由慢至快再由快至慢。
EaseExponentialIn由慢至极快。
EaseExponentialOut由极快至慢。
EaseExponentialInOut由慢至极快再由极快至慢。
Speed人工设定速度,还可通过SetSpeed不断调整。
[b]扩展动作[/b]
我们已经掌握了执行各种各样的动作,也可以按照不同的快慢修改动作执行的时间,Cocos2D-iPhone还提供了针对现有动作的扩展,以实现各种灵活的效果。
延时动作–Delay
在动作序列中增加一个时间间歇:
1 | -( void )OnDelay:( id )sender{ |
2 | id ac1=[CCMoveByactionWithDuration:2position:ccp(200,200)]; |
3 | id ac2=[ac1reverse]; |
4 | //实现一个等待间歇 |
5 | [spriterunAction:[Sequenceactions:ac1,[DelayTimeactionWithDuration:1],ac2, nil ]]; |
6 | } |
在动作序列中间或者结束调用某个函数,执行任何需要执行的任务:动作、状态修改等。代码如下:
1 | -( void )OnCallFunc:( id )sender{ |
2 | id ac1=[CCMoveByactionWithDuration:2position:ccp(200,200)]; |
3 | id ac2=[ac1reverse]; |
4 | id acf=[CCCallFuncactionWithTarget: self selector: @selector (CallBack1)]; |
5 | [spriterunAction:[CCSequenceactions:ac1,acf,ac2, nil ]]; |
6 | } |
1 | -( void )CallBack1{ |
2 | [spriterunAction:[CCTintByactionWithDuration:0.5red:255green:0blue:255]]; |
3 | } |
1 | -( void )OnCallFuncN:( id )sender{ |
2 | id ac1=[CCMoveByactionWithDuration:2position:ccp(200,200)]; |
3 | id ac2=[ac1reverse]; |
4 | id acf=[CallFuncNactionWithTarget: self selector: @selector (CallBack2:)]; |
5 | [spriterunAction:[CCSequenceactions:ac1,acf,ac2, nil ]]; |
6 | } |
1 | -( void )CallBack2:( id )sender{ |
2 | [senderrunAction:[CCTintByactionWithDuration:1red:255green:0blue:255]]; |
3 | } |
1 | -( void )OnCallFuncND:( id )sender{ |
2 | id ac1=[CCMoveByactionWithDuration:2position:ccp(200,200)]; |
3 | id ac2=[ac1reverse]; |
4 | id acf=[CCCallFuncNDactionWithTarget: self selector: @selector (CallBack3:data:)data:( void *)2]; |
5 | [spriterunAction:[CCSequenceactions:ac1,acf,ac2, nil ]]; |
6 | } |
1 | -( void )CallBack3:( id )senderdata:( void *)data{ |
2 | [senderrunAction:[CCTintByactionWithDuration:( NSInteger )datared:255green:0blue:255]];} |
相关文章推荐
- Cocoa学习笔记 Cocos2d 各种动作介绍 (上)
- Cocoa学习笔记 Cocos2d 各种动作介绍 (下)
- Cocos2d 各种动作介绍
- (转载)cocos2d-X学习之主要类介绍:动作:CCAction
- cocos2d各种动作的使用(变色、跳动、旋转、闪烁、悬挂、放大缩小、渐变、animation)
- Cocoa学习笔记 Cocos2d 各种动作介绍 (下)
- Cocoa学习笔记 Cocos2d 各种动作介绍 (上)
- cocos2d笔记 (3)cocos2d里的各种动作
- cocos2d各种动作的使用(变色、跳动、旋转、闪烁、悬挂、放大缩小、渐变、animation)(三)
- cocos2d里的各种动作
- cocos2d里的各种动作
- cocos2d各种动作的使用(变色、跳动、旋转、闪烁、悬挂、放大缩小、渐变、animation)(三)
- cocos2d笔记 (3)cocos2d里的各种动作
- 转载cocos2dx的各种动作用法
- cocos2d笔记 (3)cocos2d里的各种动作
- cocos2d-x中各种动作和特效的详细解释
- Cocos2d 各种动作介绍
- Cocos2d 各种动作介绍
- cocos2d-x 浅析斗地主游戏分牌动作
- 各种字符编码介绍 (网上转载)