cocos2dx for lua 摄像机移动

在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)

 

posted on 2015-10-12 13:23  HemJohn  阅读(1279)  评论(0编辑  收藏  举报

导航