Action相当于是Cocos2d-x里面的动画操作,在Cocos2d-x里面的动画基类是CCAction类,从CCAction类派生出来的就有很多常用的动作的实现类,利用这些类就可以给我们游戏的精灵实现丰富的动作效果,类似于我们在WP8里面使用各种各样的动画类实现动画效果一样。那么下面就是这些类的结构图:

官方的技术文档可以参考下面的地址:

http://www.cocos2d-x.org/reference/native-cpp/d7/d12/classcocos2d_1_1_c_c_action.html

那么从上图可以看到Cocos2d-x提供了很多基本的动作类,主要包括两大类:一类是瞬时动作(CCActionInstant),一类是延时动作(CCActionInterval)。

瞬时动作CCActionInstanse是没有执行过程,动作瞬间就执行完成了;CCActionInterval则是执行需要一个过程,跟我们编写的普通程序的动画一样的原理。下面我们主要介绍下延时动作,延时动作有下面这些:移动(CCMoveTo/CCMoveBy)、缩放(CCScaleTo/CCScaleBy)、旋转(CCRotateTO/CCRotateBy)、扭曲(CCSkewTo/CCSkewBy)、跳跃(CCJumpTo/CCJumpBy)、贝塞尔曲线(CCBezierTo/CCBezierBy)、闪烁(CCBink)、淡入淡出(CCFadeIn/CCFadeOut)、染色(CCTintTo/CCTintBy)等,我们也可以把上面这些动作的几个组合成一个序列来执行,多种效果混合在一起。

下面是一些代码的实例:

//在init方法里面初始化当前的实例
bool RotateWorldTest::init()
{
bool bRet = false; do
{
//CCLayer进行初始化,初始化失败跳出循环
if ( !CCLayer::init() )
{
break;
}
//获取手机屏幕的大小
CCSize size = CCDirector::sharedDirector()->getWinSize();
//创建图片精灵
CCSprite *sprite = CCSprite::create("cat.png");
sprite->setPosition(ccp(size.width * 0.5, size.height * 0.5));
sprite->setScale(1.5f);
this->addChild(sprite);
//移动
//从当前的位置到新的位置
CCActionInterval* actionMoveTo = CCMoveTo::create(, ccp(size.width-, size.height-));
sprite->runAction( actionMoveTo);
//从当前的位置递增到另外的位置,然后再返回
CCActionInterval* actionMoveBy = CCMoveBy::create(, ccp(,));
CCActionInterval* actionMoveByBack = actionMoveBy->reverse();
sprite->runAction( CCSequence::create(actionMoveBy, actionMoveByBack, NULL)); //缩放
CCActionInterval* actionScaleTo = CCScaleTo::create(2.0f, 0.5f);
sprite->runAction( actionScaleTo);
CCActionInterval* actionScaleBy = CCScaleBy::create(2.0f, 1.0f, 10.0f);
sprite->runAction( CCSequence::create(actionScaleBy, actionScaleBy->reverse(), NULL)); //倾斜
CCActionInterval *actionSkewTo = CCSkewTo::create(, 37.2f, -37.2f);
sprite->runAction( actionSkewTo);
CCActionInterval *actionSkewBy = CCSkewBy::create(, 0.0f, -90.0f);
sprite->runAction(actionSkewBy); //旋转
CCRotateTo* actionRotateTo = CCRotateTo::create(, 37.2f, -37.2f);
sprite->runAction( actionRotateTo);
CCRotateBy* actionRotateBy = CCRotateBy::create(, 0.0f, -90.0f);
sprite->runAction( actionRotateBy); //跳跃
CCActionInterval* actionJumpTo = CCJumpTo::create(, ccp(,), , );
sprite->runAction( actionJumpTo);
CCActionInterval* actionJumpBy = CCJumpBy::create(, ccp(,), , );
CCActionInterval* actionJumpByBack = actionJumpBy->reverse();
sprite->runAction( CCSequence::create(actionJumpBy, actionJumpByBack, NULL));
CCActionInterval* actionJumpUp = CCJumpBy::create(, ccp(,), , );
sprite->runAction( CCRepeatForever::create(actionJumpUp)); //贝塞尔曲线运动
ccBezierConfig bezier;
bezier.controlPoint_1 = ccp(, size.height/);
bezier.controlPoint_2 = ccp(, -size.height/);
bezier.endPosition = ccp(,);
CCActionInterval* bezierForward = CCBezierBy::create(, bezier);
CCActionInterval* bezierBack = bezierForward->reverse();
CCAction* rep = CCRepeatForever::create(CCSequence::create( bezierForward, bezierBack, NULL));
sprite->runAction( rep); sprite->setPosition(ccp(,));
ccBezierConfig bezier2;
bezier2.controlPoint_1 = ccp(, size.height/);
bezier2.controlPoint_2 = ccp(, -size.height/);
bezier2.endPosition = ccp(,);
CCActionInterval* bezierTo1 = CCBezierTo::create(, bezier2);
sprite->runAction(bezierTo1); sprite->setPosition(ccp(,));
CCActionInterval* bezierTo2 = CCBezierTo::create(, bezier2);
sprite->runAction(bezierTo2); //闪烁效果
CCActionInterval* actionBlink1 = CCBlink::create(, );
sprite->runAction( actionBlink1); //淡出淡入
CCActionInterval* actionFadeIn1 = CCFadeIn::create(1.0f);
CCActionInterval* action1FadeInBack = actionFadeIn1->reverse();
sprite->runAction( CCSequence::create( actionFadeIn1, action1FadeInBack, NULL));
CCActionInterval* actionFadeOut2 = CCFadeOut::create(1.0f);
CCActionInterval* actionFadeOut2Back = actionFadeOut2->reverse();
sprite->runAction( CCSequence::create( actionFadeOut2, actionFadeOut2Back, NULL)); //色彩
CCActionInterval* actionTint1 = CCTintTo::create(, , , );
sprite->runAction( actionTint1);
CCActionInterval* actionTint2 = CCTintBy::create(, -, -, -);
CCActionInterval* actionTint2Back = actionTint2->reverse();
sprite->runAction( CCSequence::create( actionTint2, actionTint2Back, NULL)); //接收界面的的触摸事件
setTouchEnabled(true); bRet = true;
} while ();
//返回成功
return bRet;
}

把代码复制到Hello World项目里面,就可以看到相关的运行效果了。

[Cocos2d-x For WP8]Action 常用动作的更多相关文章

  1. Tip:JSP标签也称之为Jsp Action(JSP动作)元素

    JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. ================ &l ...

  2. odoo开发笔记:Server+Action服务器动作自动触发执行

           Odoo的市场定位是SME(中小型企业),这个市场的ERP产品,多如牛毛,产品各具特色.不过,Odoo的自动化处理机制,可以睥睨天下,无人能及.包括一些大型国产软件,如用友.金蝶也不具备 ...

  3. 【操作系统之十五】iptables黑白名单、自定义链、网络防火墙、常用动作

    1.黑白名单当链的默认策略为ACCEPT时,链中的规则对应的动作应该为DROP或者REJECT,表示只有匹配到规则的报文才会被拒绝,没有被规则匹配到的报文都会被默认接受,这就是"黑名单&qu ...

  4. cocos2D v3.x 中action的回调block变化

    cocos2D v2.x中有带参数的回调block: id blk = [CCCallBlockN actionWithBlock:^(CCNode *node){ node.position = o ...

  5. WP8开发常用解决方案收集

    我其实不怎么做wp的东西.但是偶尔还是会用到, 但是wp8开发的资料确实难找.特开此贴,记录一些常见的解决方案 1.水平滑动动画(比如app首次使用说明就可以用这个做) http://www.cnbl ...

  6. jsp常用动作

    jsp:include 动态包含: jsp:forward 转发: jsp:useBean 实例化bean对象: jsp:setProperty 设置一个属性值 jsp:getProperty 获取一 ...

  7. cocos2d-x 3.1.1 学习笔记[3]Action 动作

    这些动画貌似都非常多的样子,就所有都创建一次. 代码例如以下: /* 动画*/ auto sp = Sprite::create("card_bg_big_26.jpg"); Si ...

  8. cocos2D v3.x中动作回调函数的变化

    cocos2D v3.x版本中的动作的回调函数不能再带任何参数并且不能返回任何值. 官方给出的传递参数的办法是: 选择器(selector)不能带有任何形参,选择器需要的参数必须通过ivar或prop ...

  9. JSP——JavaServer Page中的隐式对象(implicit object)、指令(directive)、脚本元素(scripting element)、动作(action)、EL表达式

    目录 1.JSP概述 2.注释(comment) 2.1.JSP注释 2.2.HTML注释 3.隐式对象(implicit object) 3.1.隐式对象清单 3.2.request对象 3.3.o ...

随机推荐

  1. BNUOJ 1037 精神控制

    XsuagrX喜欢到处唬人,各种唬.这不,经过刻苦修炼,他终于掌握了Bane Element的Ultra绝技加强版,恶魔掌控(快捷键F)(YY中&……).当XsugarX对某个人胡言乱语Q@# ...

  2. HDOJ 1272 并查集

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  3. 12 day 1

    #include <cstdio> int i,j,m,n,t; long long f[6000][6000]; inline int min(int a,int b){ return ...

  4. 【Python】Python XML 读写

    class ACTIVE_FILE_PROTECT_RULE_VIEW(APIView): renderer_classes = (JSONRenderer, BrowsableAPIRenderer ...

  5. springMVC 上传文件

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...

  6. MyBatis3: Could not find SQL statement to include with refid ‘

    错误: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.Incompl ...

  7. 转mysql复制主从集群搭建

    最近搭了个主从复制,中间出了点小问题,排查搞定,记录下来 1环境:虚拟机:OS:centos6.5Linux host2 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 ...

  8. 2014 牡丹江现场赛 A.Average Score(zoj 3819) 解题报告

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5373 题目意思: 有两个class:A 和 B,Bob 在 Clas ...

  9. 基因变异(codevs 3194)

    题目描述 Description 小毛终于来到了冥王星,这是一颗已经不属于行星的矮行星,它的表面温度低于-220度.在这里,小毛惊奇的发现,他带来的厌氧菌开始了基因变异,裂变的速度与光照时间(秒)成乘 ...

  10. Fresco 源码分析(二) Fresco客户端与服务端交互(3) 前后台打通

    4.2.1.2.4 PipelineDraweeControllerBuilder.obtainController()源码分析 续 上节中我们提到两个核心的步骤 obtainDataSourceSu ...