转载标明出处:http://blog.csdn.net/notbaron/article/details/38447253
上篇回顾
上篇中,蛤蟆学习CC_CALLBACK的基本原理,虽然不是非常深入,但是应付目前基本够用了。这次我们再学习一个C++11的新特性lambda。是不是没听过?蛤蟆也是第一次听说。那我们赶紧开始吧。
理论介绍
首先我们来看下Orbit是什意思,orbit['ɔ:bɪt][美][ˈɔrbɪt]表示 轨道; 势力范围。
然后我们来看下继承关系,如下图
这个类辈分小了一点,不够根据蛤蟆经验。辈分小的类花头多,熟话说“天下没有好阿三”。这个是我们老家那边的俗语,不是说印度阿三。是说家里排行小的都比较调皮。
而且这个OrbitCamera类是ActionCamera类的唯一孩子。
我们看一下这个类的create函数如下:
static OrbitCamera* create |
( |
float |
t, |
float |
radius, |
||
float |
deltaRadius, |
||
float |
angleZ, |
||
float |
deltaAngleZ, |
||
float |
angleX, |
||
float |
deltaAngleX |
||
) |
这个函数创建一个带有起始半径、半径差、起始z角、旋转z角的差、起始x角、旋转x角的差这些参数的运动视角动作类
Ok,我们看下具体使用。
具体步骤
我们还是在HelloWorld.cpp文件中找到
bool HelloWorld::init()函数,加入如下代码。
autoorbit1 =OrbitCamera::create(2,1,0, 0, 180, 0, 0);
auto action =Sequence::create(
orbit1,
orbit1->reverse(),
nullptr);
auto grossini =Sprite::create("grossini.png");
addChild(grossini,0, 2);
grossini->setPosition(Vec2( 50+origin.x, visibleSize.height/2 + origin.y));
grossini->runAction(action);
运行得到图片就不发了,因为截图看不出什么效果。小伙伴们可以自己在电脑里尝试之。
代码解释
下面我们来解释下代码的含义:
autoorbit1 =OrbitCamera::create(2,1,0, 0, 180, 0, 0);//创建一个动作对象,动作完成时间是2秒,起始半径为1、半径差为0、起始z角为0、旋转z角的差为180、起始x角0、旋转x角的差0
auto action =Sequence::create(
orbit1,
orbit1->reverse(),
nullptr);
auto grossini =Sprite::create("grossini.png");//创建一个动作,sequence表示里面的动作顺序执行。Orbit1->reverse()表示动作安装相反的方向运动。
addChild(grossini,0, 2);//添加精灵
grossini->setPosition(Vec2( 50+origin.x, visibleSize.height/2 + origin.y));//设置精灵位置
grossini->runAction(action);//精灵运行
这个代码里面,其中最让人疑惑的的OrbitCamera::create(2,1, 0, 0, 180, 0, 0); 这个函数。什么是起始半径?半径差?什么是起始Z角?什么是旋转Z角?什么是起始X角?什么是旋转X角?
我们先来看下球面坐标
球面轨迹旋转
这个 OrbitCamera::create 函数共有
float |
t, |
float |
radius, |
float |
deltaRadius, |
float |
angleZ, |
float |
deltaAngleZ, |
float |
angleX, |
float |
deltaAngleX |
参数。
该动作过程中,会将参数deltaAngleZ, deltaAngleX的角度转变成弧度(比如deltaAngleZ参数为180,那么转换成弧度就是180*π/180=3.14)。
目前我们这里可以简单的先这样理解,每个精灵都有一个摄像头。然后这个摄像头可以在精灵的外围运动。就像卫星围绕着地球一样旋转一样。当卫星绕这地球运动的时候,从卫星上看到的地球是不一样的,有时候是亚洲,有时候是非洲,而有时候就可能好是美洲了。
起始半径就是卫星和地球的距离,而半径差是卫星和地球距离的变化可正可负。(不过蛤蟆实测发现好像没撒区别)
起始Z角及旋转Z角,我们目前可以理解成摄像机沿着球面的的水平方向旋转。
起始X角及旋转X角,可以理解成摄像机沿着球面的的垂直方向旋转。
总结
本次蛤蟆记录OrbitCamera类的使用,不是非常的详细后续有待进一步深入。有小伙伴们有深入理解请告诉蛤蟆。