zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    解决 “页面中文字增多,字号突然变大” 的问题
    Seajs的用法
    clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
    页面中文字增多,字号会突然变大
    flex的使用实例
    移动端弹窗滚动时window窗体也一起滚动的解决办法
    display:inline-block带来的问题及解决办法
    sql 整理积累
    T-SQL建索引
    php json_encode在CI框架中的使用细节
  • 原文地址:https://www.cnblogs.com/HemJohn/p/4871394.html
Copyright © 2011-2022 走看看