前言: 在搞一個(gè)cocos2dx 戰(zhàn)斗運(yùn)用到3d的項(xiàng)目。在游戲rootNode里面添加2個(gè)相機(jī)。用來展現(xiàn)map類和fight場景類的顯示。這樣子整個(gè)游戲就有3個(gè)相機(jī)了。一個(gè)是default的默認(rèn)相機(jī),相機(jī)深度為1。map類定義了相機(jī)深度為-2。fight場景類定義相機(jī)深度為-1。
cocos2dx的camera有幾個(gè)相機(jī)模式,默認(rèn)的,正交的,透視的可以參考這些文章的使用。
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.html1,cocos2dx的camera都有一個(gè)CameraFlag和CameraDepth(可以理解為相機(jī)的名字和相機(jī)的拍攝地點(diǎn))。一,只有camera和其他node在同一個(gè)rootNode的時(shí)候相機(jī)才會(huì)作用于其他node。二,只有camera的flag和node的CameraMask相同時(shí)候,其他node才會(huì)顯示出來。
--根節(jié)點(diǎn)local rootNode = cc.Node:create()--相機(jī)1,深度為1camera1 = cc.Camera:create()camera1:setCameraFlag(1)--通過調(diào)用setDepth可以設(shè)置攝像機(jī)的繪制順序,越大的深度越繪制的靠上,所以默認(rèn)攝像機(jī)默認(rèn)是0,其他攝像機(jī)默認(rèn)是1。camera1:setDepth(1)rootNode:addChild(self.camera1)--圖片1顯示在深度為1的相機(jī)1上local sPRite1 = cc.Scale9Sprite:create("test.png")rootNode:addChild(sprite1)sprite1:setCameraMask(1) --設(shè)置在名字叫做1的相機(jī)上--此時(shí)圖片1會(huì)顯示在屏幕上--如果sprite1:setCameraMask(2),那么此圖片不會(huì)顯示在屏幕上2,cocos2dx一開始會(huì)創(chuàng)建一個(gè)默認(rèn)攝像機(jī)default,默認(rèn)攝像機(jī)用于繪制ui,它是最后被繪制的。在做2d和3d混合的項(xiàng)目時(shí)候,一般來說需要一個(gè)另外的攝像機(jī)來繪制3d物體而不是默認(rèn)攝像機(jī),當(dāng)深度測試未開啟時(shí),可以調(diào)整攝像機(jī)的繪制順序,所有攝像機(jī)的繪制順序都是先繪制2d物體和不透明3d物體,然后繪制透明3d物體。
--自定義2個(gè)相機(jī)camera1:setCameraFlag(1)camera1:setDepth(1)camera1:setCameraFlag(2)camera1:setDepth(2)--分配場景到不同相機(jī)上面顯示uiLayer:setCameraMask(0)--默認(rèn)相機(jī),顯示2duimapLayer:setCameraMask(1)--相機(jī)1,顯示map地圖類fightLayer:setCameraMask(2)--相機(jī)2,用來顯示戰(zhàn)斗3,游戲內(nèi)3d場景用的是正交攝像機(jī),置于游戲的最頂層
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,相機(jī)的cameraFlag在cocos有原生的8個(gè)定義
local cameraFlag ={ cc.CameraFlag.DEFAULT, cc.CameraFlag.USER1, cc.CameraFlag.USER2, cc.CameraFlag.USER3, cc.CameraFlag.USER4, cc.CameraFlag.USER5, cc.CameraFlag.USER6, cc.CameraFlag.USER7, cc.CameraFlag.USER8,}5,說說在使用相機(jī)需要注意的
1,注意相機(jī)的深度,在不同相機(jī)混合的場景中,往往會(huì)因?yàn)椴煌鄼C(jī)的深度不同而導(dǎo)致場景ui消失, 此時(shí)要調(diào)整需要顯示的node的camera 或者 隱藏其他比之高深度camera的場景2,相機(jī)添加進(jìn)rootNode后,手動(dòng)去remove此相機(jī)會(huì)導(dǎo)致游戲閃退(cocos3.12,為啥?)3, 創(chuàng)建node,addchild到rootNode后,新添加的node需要每次調(diào)用setCameraFlag,設(shè)置被作用的攝像機(jī)4,camera在使用lookat函數(shù)的時(shí)候,必須在node調(diào)用setPostion函數(shù)之后。新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注