【转】cocos2d 关于CCAction的介绍

该例子用的是cocosd -iphone  如果是cocos2d-x则用CC MoveBy  CC....即可

Action就好像给一个cocosNode对象的命令。这些动作通常用来改变物体的属性,例如位置,旋转,缩放等。如果这些属性在一段时间只能被修改的话,那么这中叫做 IntervalAction Action。否则,它们叫做InstantAction 的动作。

例如:MoveBy 动作,在一段时间之内,改变了位置这个属性 ,也就是说它是一个IntervalActionAction

Example:

# Move a sprite 50 pixels to the right, and 10 pixels to the top over 2 seconds.

[sprite runAction: [MoveBy actionWithDuration:2 position:ccp(50,10)]];

IntervalAction 有一些很有趣的属性

  • 它们可以通过时间改变来进行加速
    • EaseIn
    • EaseOut
    • EaseInOut
    • Speed
    • Etc. (See the EaseActionsTest.m example for more info)
  • 所有相对的动作(以By结尾的)和一些绝对的动作(以 To结尾的)都有一个翻转的动作,执行了一个相反方向的操作。
    ([action reverse]

你可以使用pause/resume 来停止和恢复action

# Pause actions

[[ActionManager sharedManager ] pauseAllActionsForTarget:sprite ] ;

 

# resume actions

[[ActionManager sharedManager ] resumeAllActionsForTarget:sprite ] ;

 

 以下的每一个动作,除了极为简单的,我都会加入一个简单的事例,以及描述下将会发生的情况。毕竟,都是物体移动,简单上图片,很难表示清楚究竟发生了什么。尤其是那个jump函数。。动作好多。。呵呵。

 简单应用,对一个box精灵进行移动测试:

-(id)init{

self = [super init];

if(nil!=self){

isTouchEnabled = YES;

boxSprite = [Sprite spriteWithFile:@"box.png"];

[boxSprite setPosition:CGPointMake(2525)];

[self addChild:boxSprite];

}

 

return self;

}

- (BOOL) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *) event

{

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView: [touch view]];

      //动作的定义 

//position

//MoveBy

id moveByAction = [MoveBy actionWithDuration:2 position:ccp(30,50)];

       //动作的执行

[boxSprite runAction:rotateByAction];

 

return YES;

}

 有些动作,还是需要自己实现了才知道函数是怎么个意思,对于e文的api,不如普通的那种顺利,大多都是些C#里面少使用的东西。有些陌生。 

 

  • position
    • MoveBy
        //MoveBy
      id moveByAction = [MoveBy actionWithDuration:2 position:ccp(30,50)];
       
      每次执行,相应精灵位置x,y增加30,和50,时间是2秒之内,移动方式,缓慢移动

    • MoveTo
        //MoveTo
      id moveToAction = [MoveTo actionWithDuration:3 position:[[Director sharedDirector]convertCoordinate:point]];
       
      每次执行,相应精灵移动到触摸位置,3秒之内,移动过去 
    • JumpBy
      //JumpBy 
      id jumpByAction = [JumpBy actionWithDuration:3 position:ccp(100,100height:20 jumps:20];
       
      每次执行,在3秒之内,相对移动100100,移动方式,以20作为跳跃高度,3秒之内,20次跳跃
    • JumpTo
      //JumpTo 
       id jumpToAction = [JumpTo actionWithDuration:3 position:ccp(100,100height:20 jumps:20];
       
      使用方式,同上。不同的是移动到100100
    • BezierBy
       
      //BezierBy
      //id bezierByAction = [BezierBy actionWithSize:2]; 
      这个貌似还没有实现,不知道要干什么。
    • Place
       
      //Place
      id placeAction = [Place actionWithPosition:[[Director sharedDirector]convertCoordinate:point]];
       
      移动到直接位置,没有时间概念。
      本人认为应用方式貌似和以下这个一致。
       
      //MoveTo
      id moveToAction = [MoveTo actionWithDuration:0 position:[[Director sharedDirector]convertCoordinate:point]];
       
       
  • scale
    • ScaleBy
      //ScaleBy
      id scaleByAction = [ScaleBy actionWithDuration:3 scaleX:0.5 scaleY:0.5];   
      每次执行,3秒之内,精灵逐渐变为原来长宽的一半
       
    • ScaleTo
      //ScaleTo
        
      id scaleToAction = [ScaleTo actionWithDuration:3 scaleX:0.4 scaleY:0.5];
       
      原理同上。 
  • rotation
    • RotateBy
      //RotateBy
       
      id rotateByAction = [RotateBy actionWithDuration:3 angle:30.0];
       
      3秒之内,逐渐向右旋转30度。 
    • RotateTo
       //RotateTo
      id rotateToAction = [RotateTo actionWithDuration:3 angle:30.0];    
       
      下面三个不再一一举例了,无非就是对物体,可见性,透明度,以及上色的操作。
      记住上面这一点。有相对的动作(以By结尾的)和一些绝对的动作(以 To结尾的)。。记住相对和绝对就行了!
  • visible
    • Show
    • Hide
    • Blink
    • ToggleVisibility
  • opacity
    • FadeIn
    • FadeOut
    • FadeTo
  • r, g, b
    • TintBy
    • TintTo

例子:

CGSize s = [[Director sharedDirector] winSize];

 

id actionTo = [MoveTo actionWithDuration: 2 position:ccp(s.width-40, s.height-40)];

id actionBy = [MoveBy actionWithDuration:2  position: ccp(80,80)];

 

[sprite1 runAction: actionTo];

[sprite2 runAction:actionBy];

 

Almost all actions have the reverse method implemented. Basically it creates a new action with the reverse behavior.

Example:

id move = [MoveBy actionWithDuration:2  position: ccp(80,80)];

 

id move_reverse = [move reverse];

The move_reverse action will be a MoveBy action of duration 2, but with the position value of ccp(-80,-80).

 

Attetion plz

 

本系列文章原形来自于cocos2d的官方wiki,本人进行翻译整理,并加入个人心得,及其很多额外代码补充实现。 

原文网址:http://www.cnblogs.com/AlexLiu/archive/2010/01/24/1655222.html

你可能感兴趣的:(的,是)