cocos2d-x v3.9 与ActionInterval的孩子们之间的对话(1)

原创 2015年11月20日 09:25:45

我(对MoveBy):你的爹地ActionInterval除了你还有其他的孩子吗?
MoveBy:有,而且还有很多。他们也几乎都是一对儿一对儿的,不是父子就是兄弟,当然也有独生子。
我(窃窃私语):你们的爹地好能生……
MoveBy:而且他们的大多数的工作方式与我们相似。
我:有点儿意思,待我去与他们聊聊。


我:你们能做什么?
RotateBy和RotateTo:我们能旋转您指定的物体。
我:听说你们与MoveBy和MoveTo的工作方式很类似,有什么不同之处吗?
RotateBy:当然有,有以下几点,
1、旋转分为3种模式,各自的创建方式也不同,
(1) 2D平面内的普通旋转,围绕物体的z轴旋转,正顺时针,负逆时针。

auto rotateBy2D = RotateBy::create(1.0f, 360);    // 2D平面内围绕z轴顺时针旋转360°。
auto rotateBy2D = RotateBy::create(1.0f, -60);    // 2D平面内围绕z轴逆时针旋转60°。

(2) 2D平面内的Skew旋转,只有两个角度设置为不同的值时才能触发这种旋转,正顺时针,负逆时针。这种旋转的效果不好描述,还是实际实验一下比较好。

auto rotateBy2DSkew = RotateBy::create(1.0f, 360, -360);    // 2D平面内的Skew旋转。
auto rotateBy2D = RotateBy::create(1.0f, 360, 360);    // 2D平面内的普通旋转。

(3) 3D空间中的旋转。

// 围绕X轴、Y轴、Z轴的旋转,正负影响旋转的方向。
auto rotateBy3D = RotateBy::create(1.0f, Vec3(360, 0, 0));
auto rotateBy3D = RotateBy::create(1.0f, Vec3(0, -360, 0));
auto rotateBy3D = RotateBy::create(1.0f, Vec3(0, 0, 360));

2、不同的旋转模式在update()中设置与获取物体角度的函数不同,

Tables 获取X轴角度 获取Y轴角度 设置X轴角度 设置Y轴角度
2D平面内的普通旋转 getRotationSkewX() getRotationSkewY() setRotation() setRotation()
2D平面内的Skew旋转 getRotationSkewX() getRotationSkewY() setRotationSkewX() setRotationSkewY()
3D空间中的旋转 getRotation3D() getRotation3D() setRotation3D() setRotation3D()

3、不支持多个RotateTo或RotateBy动作同时作用于同一个物体。如果这么使用了,混合的运动效果可不一定是什么样的哦。
我:嗯,果然还是有不少差别的。RotateTo呢?你有什么要说的。
RotateTo:我嘛,相比于MoveTo除了刚才RotateBy说的那些差别外还有一个差别。MoveTo是MoveBy的儿子,而我是RotateBy的兄弟,我们都是ActionInterval的孩子。所以我也不像MoveTo那样绝大部分的功能都由他的老爹实现,计算旋转角度,让物体旋转都由我自己来实现。
我:不过看起来你和RotateBy的工作模式差不多相同。
RotateTo:说实话我也觉得是,不过不知道设计者为何如此设计。
我:此外我在看你计算变化角度的时候有一个疑问,与我理解的变化角度的计算有出入,见我的这篇博文。如果你见到你的设计者也让他看一眼吧,:)

我:接下来是SkewTo和SkewBy父子。
SkewTo:在呢。我们能做的还是要实际试一试才更直观。

auto skewto = SkewTo::create(3, 100, 0);
auto skewby = SkewBy::create(3, 0, 100);

我:嗯,我做了几个测试,觉得SkewTo你在计算X轴的变化角度时有些问题,还是见我的这篇博文
SkewTo:嗯,好的,希望设计者能看到,:)
我:此外,你俩的父子关系相比于MoveTo和MoveBy是倒过来。
SkewTo:嗯,没错。我是老爹,计算变化角度以及让物体动起来都由我来负责。
SkewBy:我是儿子,我把目标角度计算出来给我的老爸,其他的就都由老爸负责了。
我(窃窃私语):虽然父子关系颠倒,但与MoveBy与MoveTo的工作方式相同,真是一家子。

我:看来一个爸的孩子真是有很多相似之处。ActionInterval的孩子们,你们还有谁与MoveTo,MoveBy,RotateTo,RotateBy或者SkewTo,SkewBy工作方式相似的,都来自报家门吧。
JumpTo和JumpBy:我们能让您指定的物体以抛物线弹跳的方式跳跃,您只需要告诉我们规定的时间、目的地坐标、跳跃的高度以及跳跃的次数。理解我们的实现您需要理解抛物线弹跳的计算方式http://blog.csdn.net/VermillionTear/article/details/50547836
BezierBy和BezierTo:我们能让您指定的物体以贝塞尔曲线的轨迹运动,理解我们的实现您需要理解贝塞尔曲线的原理。
ScaleTo和ScaleBy:我们能缩放您指定的物体,您只需要告诉我们规定的时间以及缩放的比例。
ScaleTo:需要注意的是,您给我的是以物体原尺寸为基础缩放到的比例。举个例子,假设物体当前尺寸为原尺寸的2倍,

auto scaleto = ScaleTo::create(3, 5);

那么我会将物体缩放到原尺寸的5倍。
ScaleBy:而您给我的是以物体当前尺寸为基础缩放到的比例。还是上面的假设,

auto scaleby = ScaleBy::create(3, 5);

那么我会将物体缩放到原尺寸的10倍(2 * 5)。
TintTo和TintBy:我们能改变您指定物体的RGB值,您只需要告诉我们规定的时间以及相应的RGB值。
Blink:我是个独生子,我可以让您指定的物体闪烁,您只需要告诉我规定的时间以及闪烁的次数。同时我还很听话,在闪烁完成之后我还会把物体的可见状态恢复为执行闪烁动作之前的可见状态。
FadeTo:我能改变您指定物体的透明度,您只需要告诉我们规定的时间以及目标透明度。不过设计者没有实现FadeBy倒是有些奇怪。
FadeIn和FadeOut:我们是FadeTo的儿子,我们可以让您指定的物体变为全透明或者全不透明,我们就相当于老爸的一个快捷方式,我们能做的老爸也能做。

我(自言自语):听他们说了这么多,看起来是各显神通。不过其实他们的这些本领除了他们自身有良好的技术外,还要依靠他们手里那些神奇的工具,

Tables 获取 设置
MoveTo and MoveBy getPosition3D() setPosition3D()
RotateTo and RotateBy getRotationSkewX(), getRotationSkewY(), getRotation3D() setRotation(), setRotationSkewX(), setRotationSkewY(), setRotation3D()
SkewTo and SkewBy getSkewX(), getSkewY() getSkewX(), getSkewY()
JumpTo and JumpBy getPosition() setPosition()
BezierBy and BezierTo getPosition() setPosition()
ScaleTo and ScaleBy getScaleX(), getScaleY(), getScaleZ() setScaleX(), setScaleY(), setScaleZ()
TintTo and TintBy getColor setColor()
Blink getVisible() setVisible()
FadeIn, FadeOut and FadeTo getOpacity() setOpacity()

此外,他们的实现方式上也有一些我不理解的地方,看来我也有很多需要额外学习的东西,
抛物线弹跳
贝塞尔曲线

记下了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

COCOS学习笔记--变速动作Speed和ActionEase

最近在看曹世博老师关于cocos引擎的学习教程,打算重新再系统梳理一下cocos相关的知识结构,学习之余把自己的一些收获和理解总结记录下来,方便日后自己回顾并同时希望本笔记可以对各位cocos学习者有...

cocos2dx实例开发之2D横版跑酷

从网上下了一点素材资源,外加自己ps一点资源,然后东拼西凑写了一个横版跑酷的小游戏 ps:csdn好不爽,无法传大点的gif,所以只好录了个短的gif,而且压缩之后凑合能看 预览 步骤 1 ...

cocos2d-x v3.9 与ActionInterval的孩子们之间的对话(2)

我:我看在ActionInterval的孩子中你们好像有些与众不同。 Sequence、ExtraAction、Repeat、RepeatForever、DelayTime以及ReverseTime...

cocos2d-x v3.9 关于RotateTo和SkewTo的疑问

最近在研究cocos2d-x v3.9的RotateTo时遇到了个问题,不知道是否算是Bug。首先说一下我理解的RotateTo。RotateTo不关心精灵当前的角度,将精灵旋转至指定的角度。无论指定...

cocos2dx v3.9 与SpriteFrameCache和AnimationCache之间的对话

我:前段时间去过动画制作组,你们两个的名字与动画制作组中的SpriteFrame和Animation很相似,难道说你们之间有什么关系? SpriteFrameCache和AnimationCache...

使用python编译Cocos2d-x3.9的cpp-tests文件夹下的所有项目

一次偶然浏览cocos论坛时,得知了引擎中提供了许多例子。然后上网搜索了一下是否能进行编译运行,结果还真的能。特此记录一下编译并运行例子的流程。 1.配置好Python语言以及ant的路径。(由于我...

cocos2d-x 3.9入门

这周刚刚开始接触cocos2d-x,第一次打开helloword的就懵了不知道该干嘛。所以这里记录一下方便日后查找。 #include "main.h" #include "AppDelegate....

win10系统搭建vs2015+cocos2d-x 3.9开发环境

前段时间卸掉了win7重装了win10系统,导致以前的vs2013+coccos3.2的开发环境不可用了,所以重新装了vs2015+cocos3.9的开发环境,安装过程中遇到了比较多的坑。 一、安装...
  • chenxu6
  • chenxu6
  • 2015年12月27日 22:44
  • 8816

Cocos2d-x 3.9教程:4.精灵的创建和基本操作

1. 精灵的创建和基本操作 1.1. 精灵的创建 ①正常创建 Sprite *sprite = Sprite::create("man.png");//通过图片创建精灵 sprite->setPos...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2d-x v3.9 与ActionInterval的孩子们之间的对话(1)
举报原因:
原因补充:

(最多只允许输入30个字)