Camera2D
现在游戏的大概样子已经出来了,但是画面是固定的,虽然人物可以走到画面之外,但是镜头不会跟着移动。
其实所有几乎所有游戏里都有相机一说,像以前读书的时候很喜欢玩的CS和最近大火的吃鸡PUBG,活着的时候是第一人称只能看到自己人物应该看到的画面,但是死后却可以看队友的视角或者自由移动。这就是镜头的作用,虽然我说的这几款游戏都是3D,只是为了方便理解举的一个例子。
Godot实现游戏镜头这个功能真的很方便,毕竟是个游戏引擎来的。我们在我们的玩家节点下添加一个Camera2D
节点,并且在右侧的设置栏中找到Current
把这个新镜头设置为当前镜头即可。
另外这里说几个Camera2D的几个属性
Darg margin H
:人物水平移动到i什么位置才移动镜头Drag Margin V
:人物垂直移动到什么位置才移动镜头Smoothing
:效果为平滑移动镜头,属性Speed
可以设置镜头平滑移动的速度快慢
窗口拉伸及画面保持
在没设置窗口不允许拉动的情况如果玩家强行拉伸窗口会出现一些原本设计之外的画面,如下图,这是我们不想看到的
同门可以通过设置项目>项目设置>display>windows
的相关属性来控制这个问题
- Resizable:是否允许改变窗口大小
- Stretch>Mode:disabled:关闭,2d:以2d风格拉伸,Viewprot:以视窗进行拉伸。第二和第三效果差不多,具体有什么区别目前还没感受到。
- Aspect:拉伸的面以什么形式展现,ignore:以黑色填充,keep:保持长宽比拉伸,Keep_wight,height:分别只保持宽和高,没保持的部分以黑色填充(感觉这个做手机竖屏游戏可能会用到。)
视差背景滚动
什么是视差?
视差就是从有一定距离的两个点上观察同一个目标所产生的方向差异。从目标看两个点之间的夹角,叫做这两个点的视差角,两点之间的连线称作基线。只要知道视差角度和基线长度,就可以计算出目标和观测者之间的距离。
视频作者举了一个很好的例子:月亮和你面前的人,你从你面前的人身前经过的时候感觉瞬间这个人就从你眼界里消失了,但是月亮却似乎一动不动,或者移动了很微小的距离。
在2D横板游戏中几乎所有的游戏都会利用到这个特性,最近很火的《空洞骑士》,以前我记忆很深刻的《最后一站》近处的人物快速的走动,远处背景上的山、城市缓慢的移动,会有一种很别样的美感。
那么在Godot上怎么实现这个功能呢?
我们要用到Godot的ParallaxBackground
和ParallaxLayer
组件,这两个组件是专门用来实现2D横板游戏视差效果的组件,你只需要把他们放到有Camera2D
的节点树他就可以自动实现视差滚动效果,甚至不需要你写任何一点代码。
我们可以通过设置ParallaxLayer
的Motion
属性来实现视差滚动效果的呈现
Scale
:我的理解大概是图层相对于屏幕有多远,这会影响图片位移的距离,越小位移越小,越大位移越大Offse
:图片相对于ParallaxBackground
的偏移量,我测试了一下,不修改ParallaxBackground
的Scale
大小的情况默认是填满整个视窗的。也就是说这个Offset设置的是图片位于视窗而不是窗口的距离。Mirroring
:设置图片的镜像纹理,也就是自动平铺,设置成图片的宽度即可。
最终实现效果如下: