笔记:摄像机跟随主角移动

记录开发过程中的小问题,请多指教
由于是直接从微信文制过来,文章样式格式有点乱·····
完整样式请阅读微信原文
更多笔记和源码请访问公众号

原文链接:https://mp.weixin.qq.com/s/zu444KC27-EvRJYVtKevpA

技术摘要

更新摄像机位置

限制摄像机边界

实现
1
添加分组

项目->项目设置->分组管理->添加分组

设置新添加分组的名字:ui

2添加Camera组件

复制 Main Camera 节点,名字改为 UI Camera

有关摄像机的详细介绍,请参考文档:
https://docs.cocos.com/creator/2.2/manual/zh/render/camera.html

depth 摄像机深度,用于决定摄像机的渲染顺序。值越大,则摄像机越晚被渲染

cullingMask 将决定这个摄像机用来渲染场景的哪些部分

clearFlags 指定渲染摄像机时需要做的清除操作

设置 UI Camera 属性:

ui 一般在游戏中处于最上层,所以将 depth 设置为一个较大的数字

cullingMask 只勾选ui分组

clearFlags 取消勾选color(清除背景颜色),否则看不到 Main Camera 中物体,只能看到黑色(即 UI Camera 的 backgroundColor)

设置 Main Camera 属性:

3设置相关节点分组

ui节点的分组需要设置为 ui

地图、玩家、怪物等节点的分组需要设置为 default

4脚本控制

在编辑器中拖拽对应的节点到脚本中

这里需要的是节点是 Main Camera(摄像机)、tiledmap(地图)、player(玩家)

因为玩家是3D模型,所以还需要一个平行光源,玩家才能显示

首先计算下摄像机边界:

//摄像机边界
this._cameraMaxX = this.tileMap.node.width/2 - cc.winSize.width/2;
this._cameraMaxY = this.tileMap.node.height/2 - cc.winSize.height/2;

然后在玩家移动的时候调用updateCameraPosition函数

updateCameraPosition() {
let target = this.nodePlayer.position;
if (target.x > this._cameraMaxX) {
target.x = this._cameraMaxX;
}
if (target.x < -this._cameraMaxX) {
target.x = -this._cameraMaxX;
}
if (target.y > this._cameraMaxY) {
target.y = this._cameraMaxY;
}
if (target.y < -this._cameraMaxY) {
target.y = -this._cameraMaxY;
}

this.mainCamera.node.position = target;
}

当摄像机到达边界后,摄像机不会再移动,只有玩家移动,这样可以防止屏幕内出现黑边

9赞

有那么复杂吗?
我都用下面的这行代码就搞定了
this.mainCamera.node.x = this.player1.x;

1赞

代码是一行没错,但分组不考虑么

哦哦 学习了

稍后会写下 A*, 摇杆,小地图,3D模型动作等

小地图期待

mark一下

咱俩理解的是一个小地图么?
我是想弄 类似王者荣耀左上角 那个小地图····

你这游戏不错, 地图尺寸正好用物理不卡.

这是闯关游戏吗?

不是闯关的,原本的游戏是 一个 在地图上打怪的小游戏~
我后来自己弄着玩,模型都换成3D的了,本来地图想换成斜45度的,但自己拼的实在太丑~
里边没有加物理:joy:

就是那个,想看看怎么实现,大部分说的都是用另外一个摄像机来搞

感觉抽象的小地图比较好看,直接游戏画面作为小地图不是很友好。

这不是正经项目~
这是我写的demo吧······
我也不会美术:joy:
资源都是扒的

不是指美术啦,树的话用图标,主角用★表示,怪物用红点,这样小地图的功能比较清晰。

哦哦,嗯,就是形象代替~
嗯,我去扒点图 :joy:

mark

不知道现在比较里的资源会不会侵权·····

感谢分享啊,刚好用上了,做个跑马竞速的游戏

mark2