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