cocos2dx camera lua的设置

来源:互联网 发布:淘宝ued团队 编辑:程序博客网 时间:2024/05/16 18:21

前言: 在搞一个cocos2dx 战斗运用到3d的项目。在游戏rootNode里面添加2个相机。用来展现map类和fight场景类的显示。这样子整个游戏就有3个相机了。一个是default的默认相机,相机深度为0。map类定义了相机深度为-2。fight场景类定义相机深度为-1。

cocos2dx的camera有几个相机模式,默认的,正交的,透视的可以参考这些文章的使用。

 http://blog.csdn.net/fox64194167/article/details/42811939?ref=myread http://blog.csdn.net/mingzznet/article/details/42003427 http://www.cnblogs.com/manshuoquan/p/5347139.html

1,cocos2dx的camera都有一个CameraFlag和CameraDepth(可以理解为相机的名字和相机的拍摄地点)。一,只有camera和其他node在同一个rootNode的时候相机才会作用于其他node。二,只有camera的flag和node的CameraMask相同时候,其他node才会显示出来。

--根节点local rootNode = cc.Node:create()--相机1,深度为1camera1 = cc.Camera:create()camera1:setCameraFlag(2)--通过调用setDepth可以设置摄像机的绘制顺序,越大的深度越绘制的靠上,所以默认摄像机默认是0,其他摄像机默认是1。camera1:setDepth(1)rootNode:addChild(self.camera1)--图片1显示在深度为1的相机1上local sprite1 = cc.Scale9Sprite:create("test.png")rootNode:addChild(sprite1)sprite1:setCameraMask(2) --设置在名字叫做1的相机上--此时图片1会显示在屏幕上--如果sprite1:setCameraMask(4),那么此图片不会显示在屏幕上

2,cocos2dx一开始会创建一个默认摄像机default,默认摄像机用于绘制ui,它是最后被绘制的。在做2d和3d混合的项目时候,一般来说需要一个另外的摄像机来绘制3d物体而不是默认摄像机,当深度测试未开启时,可以调整摄像机的绘制顺序,所有摄像机的绘制顺序都是先绘制2d物体和不透明3d物体,然后绘制透明3d物体。

--自定义2个相机camera1:setCameraFlag(2)camera1:setDepth(1)camera1:setCameraFlag(4)camera1:setDepth(2)--分配场景到不同相机上面显示uiLayer:setCameraMask(1)--默认相机,显示2duimapLayer:setCameraMask(2)--相机1,显示map地图类fightLayer:setCameraMask(4)--相机2,用来显示战斗

3,游戏内3d场景用的是正交摄像机,置于游戏的最顶层

local visibleSize = cc.Director:getInstance():getVisibleSize()local cameraDistance = 1000local cameraWidth = 750local cameraHeight = -1000local cameraDepth = 1500local camera = cc.Camera:createOrthographic(visibleSize.width, visibleSize.height, 1, cameraDepth*2)camera:setPosition3D(cc.vec3(0,0, cameraDepth))camera:setCameraFlag(3)camera:setDepth(3)rootNode:addChild(camera)  

4,相机的cameraFlag在cocos有原生的8个定义

local cameraFlag ={    cc.CameraFlag.DEFAULT, --1    cc.CameraFlag.USER1,   --2    cc.CameraFlag.USER2,   --4    cc.CameraFlag.USER3,   --8    cc.CameraFlag.USER4,   --16    cc.CameraFlag.USER5,   --32    cc.CameraFlag.USER6,   --64    cc.CameraFlag.USER7,   --128    cc.CameraFlag.USER8,   --256}

5,说说在使用相机需要注意的

1,注意相机的深度,在不同相机混合的场景中,往往会因为不同相机的深度不同而导致场景ui消失,    此时要调整需要显示的node的camera 或者 隐藏其他比之高深度camera的场景2,相机添加进rootNode后,手动去remove此相机会导致游戏闪退(cocos3.12,为啥?)3, 创建node,addchild到rootNode后,新添加的node需要每次调用setCameraFlag,设置被作用的摄像机4,camera在使用lookat函数的时候,必须在node调用setPostion函数之后。5, 在有3d和2d的场景,想显示2d的label或者图片正常显示,可以用 cc.BillBoard:create()来替代cc.Node。这样就可以正常显示了
0 0
原创粉丝点击