cocos2d_lua 2.5D

业务需求需要在2d场景内显示3d的东西,其实原理就是用多个摄像机,在2d的scene实例化这个,然后创建贴图,则会沿Z轴朝里移动,闲话不哆嗦,直接贴代码

-- 投影摄像机 
local CameraPersLayer = class("CameraLayer", function ()
    local layer = cc.Layer:create()
    return layer
end)

function CameraPersLayer:ctor(_cameraFlag)

    self._camera = nil
    self._cameraFlag = _cameraFlag

    self:init()
end

function CameraPersLayer:init()

    self:registerScriptHandler(function (event)
        if event == "enter" then
            self:onEnter()
        elseif event == "exit" then
            self:onExit()
        end
    end)

end

function CameraPersLayer:setNodeCameraMask(_node )
    _node:setCameraMask(self._cameraFlag)
end

function CameraPersLayer:onEnter( )
    
    
    self.m_layer = cc.Layer:create()
    self:addChild(self.m_layer)

    local winSize = cc.Director:getInstance():getWinSize()
    local zeye    = cc.Director:getInstance():getZEye();
    local eye    = cc.vec3(winSize.width/2, winSize.height/2, zeye)
    local center = cc.vec3(winSize.width/2, winSize.height/2, 0)
    local up     = cc.vec3(0, 1, 0)
    self._camera = cc.Camera:createPerspective(60, winSize.width / winSize.height, 10, zeye + winSize.height / 2) 
    self._camera:setCameraFlag(self._cameraFlag)
    self._camera:setDepth(self._cameraFlag)
    self.m_layer:addChild(self._camera)
    self._camera:setPosition3D(eye);
    self._camera:lookAt(center, up);


    self:initUI( )

    self:setNodeCameraMask(self.m_layer )

end

function CameraPersLayer:onExit( )
    
end

function CameraPersLayer:initUI( )

    local spr3d = cc.Sprite3D:create()
    local sp = util_createSprite("Common/ZooMania_bg_2.png")
    spr3d:addChild(sp)
    self.m_layer:addChild(spr3d)
    spr3d:setScale(0.5)
    spr3d:setPosition3D(cc.vec3(display.center.x,display.center.y,-608))
    spr3d:setRotation3D(cc.vec3(0,70,-90))

    local z = -608
    schedule(self,function(  )
        z = z + 10
        spr3d:setPosition3D(cc.vec3(display.center.x,display.center.y,z))
    end,0.2)

    
end



return CameraPersLayer

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖鸟难飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值