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

cocos2dx for lua 摄像机移动的更多相关文章

  1. Cocos2d-x下Lua调用自定义C++类和函数的最佳实践[转]

    Cocos2d-x下Lua调用C++这事之所以看起来这么复杂.网上所有的文档都没讲清楚,是因为存在5个层面的知识点: 1.在纯C环境下,把C函数注册进Lua环境,理解Lua和C之间可以互相调用的本质 ...

  2. 【转】Cocos2d-x下Lua调用自定义C++类和函数的最佳实践

    转自:http://segmentfault.com/blog/hongliang/1190000000631630 关于cocos2d-x下Lua调用C++的文档看了不少,但没有一篇真正把这事给讲明 ...

  3. 《Cocos2d-x实战 Lua卷》上线了

    感谢大家一直以来的支持!各大商店均开始销售:京东:http://item.jd.com/11659697.html当当:http://product.dangdang.com/23659810.htm ...

  4. 如何使用ZEROBRANE STUDIO远程调试COCOS2D-X的LUA脚本(转)

    http://www.cocos2d-x.org/docs/manual/framework/native/v2/lua/lua-remote-debug-via-zerobrane/zh ZeroB ...

  5. 分析cocos2d-x的lua项目中的工具方法

    在创建完cocos2d-x的lua项目后.打开项目的Resources中的extern.lua文件.里面有两个用于面向对象的方法.一个是用于克隆,一个是用于继承. 代码分析例如以下 --克隆一个对象 ...

  6. cocos2d-x的lua脚本加载CocostudioUI两种方式

    前言 当前版本使用的是quick cocos2dx lua 3.3.UI使用cocostudio编辑器1.6.0.我们在程序里面可以使用两种方式进行解析UI.开始的时候用的是quick的方法, 结果遇 ...

  7. cocos2dx的lua绑定

    一.cocos2dx对tolua++绑定的修正 A.c对lua回调函数的引用 在使用cocos2dx编写游戏时,我们经常会设置一些回调函数(时钟.菜单选择等).如果采用脚本方式编写游戏的话,这些回调函 ...

  8. cocos2dx与Lua以及quick cocos

    1.cocos2dx中的脚本架构与组件 2.quick cocos的开发优势 3.自定义c++类如何导出到lua

  9. cocos2dx解析lua table数据结构 简易版.

    之前一直用xml填配置, cocos2dx自带了xml解析接口, 非常方便. 但是, 接口好用也改变不了xml的结构字符太多, 书写麻烦, 乱七八糟的事实. 很早就想换lua, 无奈引擎没有现成接口, ...

随机推荐

  1. tarjan求强连通分量的思考

    我是按照这里的思路来的.这个博文只是感性理解. 递归树 关于递归树,这篇博文讲的很好,我只是给自己总结一下. 定义vis数组,在dfs连通图时赋予它们不同的含义: vis=0,表示这个点没有被访问. ...

  2. selenium+Python搭建

    安装环境:windows 7 64位   1.安装python,版本为python2.7 1)下载安装包. 在python官方网站选择下载python2版本的windows安装包:python-2.7 ...

  3. redids

    Redis 地理位置(geo) Redis 键(key) Redis 字符串(String) Redis 哈希(Hash) Redis 列表(List) Redis 集合(Set) Redis 有序集 ...

  4. 02.Jquery Mobile介绍以及Jquery Mobile页面与对话框

    一.为什么要学Jquery Mobile   JqueryMobile 是jquery的移动版本,懂基本的jquery知识,会简单的html+css就可以完成很多复杂的功能,还有就是这个框架在企业中用 ...

  5. [Android]进程间通信的方法

    一.管道 管道是进程间通信中最古老的方式,它包括 无名管道 和 有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信. 无名管道由pipe()函数创建. #i ...

  6. 安装Jaspersoft Studio

    下载位置:http://community.jaspersoft.com/project/jaspersoft-studio/releases.

  7. openstack安装newton版本neutron服务部署(四)

    一.管理节点部署服务: 1.安装neutron: [root@linux-node1 ~]# yum install openstack-neutron openstack-neutron-ml2 o ...

  8. SSAS 部署之创建部署脚本

    1.获取多维数据库的结构脚本: 当你的SSAS项目完成后,在Bin目录下会有一个SSAS.asdatabase文件. 2.打开“开始” ->Microsoft SQL Server 2008 R ...

  9. SQL 索引查找

    索引查找信息 在非聚集索引里,会为每条记录存储一份非聚集索引索引键的值和一份聚集索引索引键 [在没有聚集索引的表格里,是RID值指向数据页面,有聚集索引的话指向聚集索引的键(在不使用include时) ...

  10. 关于Identityserver4和IdentityServer3 授权不兼容的问题

    使用IdentityServer3 作为授权服务器,如果没有设置证书,而且client又没有设置AccessTokenType = AccessTokenType.Reference,则获取token ...