• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

cocos2dxforlua摄像机移动

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在cocos2dx中,我们想通过移动摄像机来做一些特殊处理,比如将摄像机聚焦在某个物体上,或者摄像机颤抖,摄像机原理观察sprite回收状况等等,

都需要通过相机移动来使用。

cocos2dx中的摄像机分两种,一种是正交摄像机,一种是投影摄像机。正交摄像机是cocos2dx默认的摄像机,无论你摄像机离sprite多远,显示的大小永远不变。

一种是投影摄像机,sprite的大小随着摄像机的远近相应发生变化。

 

cocos2dx的默认摄像机可以通过cc.Camera:getDefaultCamera()来获取,而投影摄像机需要手动创建并且加到当前场景中,方法如下:

  local s = cc.Director:getInstance():getWinSize()--窗口大小

        self._camera = cc.Camera:createPerspective(60, s.width/s.height, 0, 1000)--第一个参数是摄像机视角,一般是60度,第二个参数是屏幕宽高比,第三个和第四个参数分别近截面和远截面

        self._camera:setCameraFlag(cc.CameraFlag.USER1)--设置掩码值,掩码值要跟香看到的物体的掩码值一样

        self._camera:setPosition3D(cc.Camera:getDefaultCamera():getPosition3D())--设置位置

        self._camera:lookAt(cc.vec3(0,0,0),cc.vec3(0,0,0))--设置初始位置

        scene:addChild(self._camera,1)--添加到当前场景里

 

以上是我设置一个投影摄像机代替cocos2dx默认的摄像机,位置和lookat都一样。

 

然后我要让摄像机看到我想要看到的物体,需要将需要看到的物体掩码值设置一下,要与创建的摄像机的掩码值一样:

scene:setCameraMask(cc.CameraFlag.USER1)

如果我设置了当前场景的掩码值,那么当前场景的子物体的掩码值都会被相应修改,看源代码可知:

void Node::setCameraMask(unsigned short mask, bool applyChildren)

{

    _cameraMask = mask;

    if (applyChildren)

    {

        for (const auto& child : _children)

        {

            child->setCameraMask(mask, applyChildren);

        }

    }

 

但手续创建的物体的掩码值还是为默认的cc.CameraFlag.DEFAULT。

后面我们就可以通过

setRotation3D和setPosition3Dl来控制摄像机。

(转载请注明出处:from 博客园 HemJohn)

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[转] lua 获取本地当月天数发布时间:2022-07-22
下一篇:
Lua - 元表(一)发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap