cocos2dx camera lua的设置

前言: 在搞一个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,深度为1
camera1 = 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)--默认相机,显示2dui
mapLayer:setCameraMask(2)--相机1,显示map地图类
fightLayer:setCameraMask(4)--相机2,用来显示战斗

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

local visibleSize = cc.Director:getInstance():getVisibleSize()
local cameraDistance = 1000
local cameraWidth = 750
local cameraHeight = -1000
local cameraDepth = 1500

local 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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值