YIFEIYANG 易飞扬的博客

3七/101

iPhone开发之游戏篇(2) — cocos2d的Actions

  • 博主:易飞扬
  • 原文链接 : http://www.yifeiyang.net/iphone-game-developed-by-chapter-2-cocos2du002639s-actions/
  • 转载请保留上面文字。


  • iPhone开发之游戏篇(2) --- cocos2d的Actions

    Actions

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

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

    1
    2
    # 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结尾的)都有一个翻转的动作,执行了一个相反方向的操作。

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

    1
    2
    3
    4
    5
    # Pause actions
    [[ActionManager sharedManager ] pauseAllActionsForTarget:sprite ] ;
    
    # resume actions
    [[ActionManager sharedManager ] resumeAllActionsForTarget:sprite ] ;

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    -(id)init{
        self = [super init];
        if(nil!=self){
            isTouchEnabled = YES;
            boxSprite = [Sprite spriteWithFile:@"box.png"];
            [boxSprite setPosition:CGPointMake(25, 25)];
            [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;
    }

    基本的Actions

    位置

    • MoveBy
    • MoveTo
    • JumpBy
    • JumpTo
    • BezierBy
    • Place

    放大缩小

    • ScaleBy
    • ScaleTo

    旋转

    • RotateBy
    • RotateTo

    显示状态

    • Show
    • Hide
    • Blink
    • ToggleVisibility

    透明度

    • FadeIn
    • FadeOut
    • FadeTo

    RGB

    • TintBy
    • TintTo

    例子

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

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

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

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

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

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

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

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

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

    1
    2
        //BezierBy
        id bezierByAction = [BezierBy actionWithSize:2];
    1
    2
        //ScaleBy
        id scaleByAction = [ScaleBy actionWithDuration:3 scaleX:0.5 scaleY:0.5];

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

    1
    2
        //ScaleTo
        id scaleToAction = [ScaleTo actionWithDuration:3 scaleX:0.4 scaleY:0.5];
    1
    2
        //RotateBy
        id rotateByAction = [RotateBy actionWithDuration:3 angle:30.0];

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

    1
    2
        //RotateTo
        id rotateToAction = [RotateTo actionWithDuration:3 angle:30.0];
    1
    2
    3
    4
    5
    6
    7
    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];

    回滚Actions

    基本上都是以"reverse"开头的方法。就是实现某个Action的相反的动作。

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

    上面的move_reverse Action是指将MoveBy Action在2秒钟移动到ccp(-80,-80)的位置。

    相关文章

    喜欢这个文章吗?

    考虑订阅我们的RSS Feed吧!

    评论 (1) 引用 (0)
    1. 这么好的知识,再不发表评论就对不起自己的良心了,敢问博主是中国人么?


    发表评论


    还没有引用.














    相册

                                                                                                 ESC_001

    日历

    2012年二月
    « 一    
     12345
    6789101112
    13141516171819
    20212223242526
    272829  

    页面

    分类目录

    博客目录

    标签




    free counters