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. Gson @Expose熟悉和@SerializedName属性

    这两个属性一般配套使用. 1.@Expose标签的2个属性.     deserialize (boolean) 反序列化 默认 true        serialize  (boolean) 序列 ...

  2. 【Python】python代码如何调试?

    Python 程序如何高效地调试? 现在我在debug python程序就只是简单在有可能错误的地方print出来看一下,不知道python有没像c++的一些IDE一样有单步调试这类的工具?或者说各位 ...

  3. HTML控件ID和NAME属性及在CS页面获得.ASPX页面中HTML控件的值

    <转载>来自网络 一.ID是在客户端脚本里用!NAME是用于获取提交表单的某表单域信息,在form里面,如果不指定Name的话,就不会发送到服务器端,所以有name属性的控件,必须指定na ...

  4. 【转】maven命令背后是如何工作的

    转载自:http://yinny.iteye.com/blog/1883488 Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),它有三套相互独立的生命周期,请注意 ...

  5. Hadoop 2.6.0 集群部署

    Hadoop的集群部署和单节点部署类似,配置文件不同,另外需要修改网络方面的配置 首先,准备3台虚拟机,系统为CentOS 6.6,其中一台为namenode 剩余两台为 datanode: 修改主机 ...

  6. iframe并排横着显示

    由于工作需要,两个iframe需要并排横着显示: 效果如下:

  7. frameset框架下,刷新整个页面

    <a href="index.jsp" target="_parent">  index.jsp主frameset页面

  8. HDU 4334 Trouble (暴力)

    Trouble Time Limit: 5000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  9. eclipse静态部署tomcat

  10. 化工厂装箱员(洛谷 P2530)

    题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...