在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在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)
|
请发表评论