zoukankan      html  css  js  c++  java
  • CCAction 详解(非原创)

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

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

    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

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

        每次执行,相应精灵位置x,y增加30,和50,时间是2秒之内,移动方式,缓慢移动

         

      •  //MoveTo

        id moveToAction = [MoveTo actionWithDuration:3 position:[[Director sharedDirector]convertCoordinate:point]];

        每次执行,相应精灵移动到触摸位置,3秒之内,移动过去

      • //JumpBy 

        id jumpByAction = [JumpBy actionWithDuration:3 position:ccp(100,100height:20 jumps:20];

        每次执行,在3秒之内,相对移动100,100,移动方式,以20作为跳跃高度,3秒之内,20次跳跃

      • //JumpTo 

         id jumpToAction = [JumpTo actionWithDuration:3 position:ccp(100,100height:20 jumps:20];

        使用方式,同上。不同的是移动到100,100

      • BezierBy

        //BezierBy

        //id bezierByAction = [BezierBy actionWithSize:2]; 

        这个貌似还没有实现,不知道要干什么。

      • //Place

        id placeAction = [Place actionWithPosition:[[Director sharedDirector]convertCoordinate:point]];

        移动到直接位置,没有时间概念。

        本人认为应用方式貌似和以下这个一致。

         

        //MoveTo

        id moveToAction = [MoveTo actionWithDuration:0 position:[[Director sharedDirector]convertCoordinate:point]];

    • scale
      • //ScaleBy

        id scaleByAction = [ScaleBy actionWithDuration:3 scaleX:0.5 scaleY:0.5];  

        每次执行,3秒之内,精灵逐渐变为原来长宽的一半

      • //ScaleTo

          

        id scaleToAction = [ScaleTo actionWithDuration:3 scaleX:0.4 scaleY:0.5];

        原理同上。

    • rotation
      • //RotateBy

        id rotateByAction = [RotateBy actionWithDuration:3 angle:30.0];

        3秒之内,逐渐向右旋转30度。

      •  //RotateTo

        id rotateToAction = [RotateTo actionWithDuration:3 angle:30.0];    

        下面三个不再一一举例了,无非就是对物体,可见性,透明度,以及上色的操作。

        记住上面这一点。有相对的动作(以By结尾的)和一些绝对的动作(以 To结尾的)。。记住相对和绝对就行了!

    • visible
    • opacity
    • r, g, b

    例子:

    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:

    1、以专家为榜样,不必自己重新探索
    2、解构技能,找出实现80%效果的那20%
    3、不要一心二用
    4、练习练习再练习!然后获得即时反馈
    5、坚持,不要在低谷期放弃
  • 相关阅读:
    java构造方法
    StringBuffer .insert方法输出电话号码格式
    统计字符串中某个字出现的次数
    面相对象往一个数组里添加学生,显示学生信息
    OpenStack入门
    Python如何让字典保持有序
    Python包管理工具setuptools相关
    python os.path 模块常用方法
    python sys.argv[] 用法
    python远程执行命令
  • 原文地址:https://www.cnblogs.com/zhongyuan/p/2800871.html
Copyright © 2011-2022 走看看