iphone游戏开发之cocos2d ( 六 )动作的修饰、动作序列和动作序列中调用方法

holydancer原创,如需转载,请在显要位置注明:

转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/8489540



用CCActionEase来对动作进行修饰

CCActionEase继承自CCActionInterval,层次图如图所示:


该类用于更灵活的使用动作,所以我习惯称为对动作的修饰类,之所以这样叫也是因为CCActionEase在生成时是在已有的action上又包了一层(actionWithAction),而节点调用时也是直接将其作为动作来调用的;大家随便怎么叫吧,知道有这么个玩意儿就行了;

CCEaseBackIn

在正常runAction前会有一个拉后的动作;

示例:

CCEaseBackIn *ease = [CCEaseBackInactionWithAction:[CCMoveByactionWithDuration:3position:ccp(200,0)]];

 [sprite runAction:ease];

//效果为精灵在往向移动200之前先向左移动一部分;


CCEaseBackInOut

修饰前的动作运行前向后,运行结束后回弹,注意,这里回弹是超过设定的移动距离再弹回;

CCEaseBackIn *ease = [CCEaseBackInOut actionWithAction:[CCMoveBy actionWithDuration:3 position:ccp(200,0)]];

 [sprite runAction:ease];


CCEaseBackOut

修饰前的动作运行结束后弹回

CCEaseBackOut *ease = [CCEaseBackOut actionWithAction:[CCMoveBy actionWithDuration:3 position:ccp(200,0)]];

 [sprite runAction:ease];


CCEaseBounceIn

修饰前的动作结束前有三次回到起点的跳跃(自己总结的,大家还是自己看看效果好)

 CCEaseBounceIn *ease = [CCEaseBounceInactionWithAction:[CCMoveByactionWithDuration:10position:ccp(200,0)]];

  [sprite runAction:ease];


CCEaseBounceOut

修饰前的动作结束后往之前的运行轨迹上跳跃三次

 CCEaseBounceOut *ease = [CCEaseBounceOutactionWithAction:[CCMoveByactionWithDuration:10position:ccp(200,0)]];

        [sprite runAction:ease];


CCEaseBounceInOut

结合了上面两种效果

 CCEaseBounceInOut *ease = [CCEaseBounceInOutactionWithAction:[CCMoveByactionWithDuration:10position:ccp(200,0)]];

        [sprite runAction:ease];


CCEaseElasticIn

与CCEaseBounceIn效果类似,不过不是跳跃,是渐快的移动;

CCEaseElasticIn *ease = [CCEaseElasticInactionWithAction:[CCMoveByactionWithDuration:10position:ccp(200,0)]];

        [sprite runAction:ease];


CCEaseElasticOut

与CCEaseBounceOut效果类似,依然是渐快的弹性移动;

CCEaseElasticOut *ease = [CCEaseElasticOutactionWithAction:[CCMoveByactionWithDuration:10position:ccp(200,0)]];

        [sprite runAction:ease];


CCEaseElasticInOut

结合了上面两种效果;


CCEaseIn

这是比较早的版本就存在的类库了,在运动的结尾突然加速


CCEaseOut

在运动一开始就突然加速;


CCEaseInOut

由慢到快,再由快到慢,注意这三个是CCEaseRateAction的子类,有一个方法

CCEaseIn actionWithAction:action rate:rate 是可以调节rate作为速率的


还有一些CCEase效果,不过因为不常用,或者我也把握不准,试不出来效果,这里就不列了;



使用动作序列CCSequence将动作组合起来

CCSequence从CCActionInterval继承而来,使用方法类似于一个array,可以在里面添加几个动作,使其动作一个接一个运行(one after another),例如

 CCEaseBounceOut *ease = [CCEaseBounceOut actionWithAction:[CCMoveBy actionWithDuration:3 position:ccp(100,0)]];
        CCJumpBy *jump = [CCJumpBy actionWithDuration:3 position:ccp(50,0) height:50 jumps:3];
        CCSequence *sequence = [CCSequence actions:ease,jump, nil];
        [sprite runAction:sequence];

上面动作序列的效果为:sprite向右移动100,其中因为CCEaseBounceOut的原因水平方向往回弹三次,之后往向跳三次,每次50,高度为50;

注意添加动作序列时需要以nil为结尾,ios开发同学应该很熟悉这种操作;


使用回调动作CCCallFunc在动作序列中添加方法回调

一个动作序列中一个动作一个动作之间,如果我们想要调用某个方法,可以使用CCCallFunc来进行,使用方法如下:

先添加一个方法(无参数)

-(void)callBackTest
{
    CCLOG(@"!!!!!!");
}

然后用CCCallFunc来生成一个可以添加到动作序列里的对象,并放到两个动作之间;

CCEaseBounceOut *ease = [CCEaseBounceOut actionWithAction:[CCMoveBy actionWithDuration:3 position:ccp(100,0)]];
        CCJumpBy *jump = [CCJumpBy actionWithDuration:3 position:ccp(50,0) height:50 jumps:3];
        CCCallFunc *func = [CCCallFunc actionWithTarget:self selector:@selector(callBackTest)];
        CCSequence *sequence = [CCSequence actions:ease,func,jump, nil];
        
		[sprite runAction:sequence];

这样就会在执行完ease动作之后,执行jump动作之前,调用callBackTest方法,输出内容;

除了CCCallFunc,还有CCCallFuncN,CCCallFuncND可以使用,三者之间有一定的区别;CCCallFunc调用的方法没有参数,后两者分别有一个,两个参数且固定的第一个参数都是sender本身;

-(void)onCallFunc

{ }

-(void)onCallFuncN:(id)sender

{ }

-(void)onCallFuncND:(id)sender data:(void *)data

{ }



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值