这章教程,我们主要讲的是相机的使用,相机是一个3d中比较常用的概念,但是在2d游戏里,并不多见,除了一些例子外(比如类于 super Mario 那样的滚屏游戏),但是3d游戏中相机的使用非常的常见。比如第一人称的相机跟随,或者第三人称的角色跟随,在有相机的情况下,屏幕里显示的内容就要受到相机的位置的影响,通常我们意义上的屏幕坐标作为全局的坐标,在相机介入的时候已经不适用了,相机相当于一只眼睛,人类在用眼睛看物体的时候,可以从理论上的任意位置,以任意的角度观察物体,所以物体的形状会受到相机的位置、旋转角度的影响而影响,即可产生所谓的横看成岭侧成峰。

上图就是一个很好的例子,如上,是一个相机“侧身”观察一个物体,那么这个物体最终的显示效果就是一个横着摆放而不是立起来的长方体。

从Cocos2d-x 3.2版本之后,我们就引入了相机的类,我们可以非常简单的创建一个相机:

1
auto camera = Camera::createPerspective(60,visibleSize.width/visibleSize.height,0.1,100)

上面这段代码,我们创建了一个透视的相机,所谓透视的相机,其实就是模拟人眼看物体的定律:远的小,近的大,平行的物体,在极远处会交汇于一点(试想我们站在火车铁轨上瞭望)。这是我们最常使用的相机形式。

接下来,我们需要对相机设置一个标记位(FLAG),这样可以让相机与其他的相机区分开来——在一些游戏的应用中,通常不仅仅只有一个相机,如果有多个相机的话,那么我们要标记一个物体,到底是要被哪一个相机所“看到”,这时候,我们就需要设置它的cameraMask来与相机的Flag对应。

,这样这个Node以及其所有的子节点,都会被对应Flag的相机所“看到”,如果不想作用子节点,可以将第二个默认参数设为false,千万要注意这个函数只会作用于当前节点所存在的子节点,对于之后加入的节点,这个函数是没有效用的,所以每次添加新节点的时候,请重新设置cameraMask。

相机和Node一样,可以进行位移,旋转,缩放等操作。

对于相机的一些特殊操作:经常我们可以对相机做一些特殊的操作,比方说我们可以将相机挂在物体身上,可以做到类似于跟踪的效果,或者反过来,我们可以挂在相机上,这样的话,就能做到物体跟随镜头,比方说FPS中的屏幕上显示的枪支或者手臂,都是采用类似的方法做的。