瘸腿蛤蟆笔记18-cocos2d-x-3.2 OrbitCamera使用

转载标明出处:http://blog.csdn.net/notbaron/article/details/38447253

上篇回顾

         上篇中,蛤蟆学习CC_CALLBACK的基本原理,虽然不是非常深入,但是应付目前基本够用了。这次我们再学习一个C++11的新特性lambda。是不是没听过?蛤蟆也是第一次听说。那我们赶紧开始吧。

 

理论介绍

         首先我们来看下Orbit是什意思,orbit['ɔ:bɪt][美][ˈɔrbɪt]表示 轨道; 势力范围。  

然后我们来看下继承关系,如下图

瘸腿蛤蟆笔记18-cocos2d-x-3.2 OrbitCamera使用_第1张图片

这个类辈分小了一点,不够根据蛤蟆经验。辈分小的类花头多,熟话说“天下没有好阿三”。这个是我们老家那边的俗语,不是说印度阿三。是说家里排行小的都比较调皮。

而且这个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角?

         我们先来看下球面坐标

瘸腿蛤蟆笔记18-cocos2d-x-3.2 OrbitCamera使用_第2张图片


球面轨迹旋转

         这个 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类的使用,不是非常的详细后续有待进一步深入。有小伙伴们有深入理解请告诉蛤蟆。

你可能感兴趣的:(瘸腿蛤蟆笔记18-cocos2d-x-3.2 OrbitCamera使用)