接下来,我们来实现视野缩放效果:
代码编写:
- 首先,新建一个变量,命名为“摄像头缩放系数”。这个变量存放视野缩放比值:
- 当缩放比为 1 时,为原始大小;
- 当缩放比为 2 时,所有事物都会放大到 2 倍,看起来视野被拉近了;
- 当缩放比为 0.5 时,则所有事物缩小到原来的二分之一,看起来视野被拉远了。
- 在摄像机角色中,初始化摄像机缩放系数。可以先设置为0.5(缩小到0.5倍)
- 接下来,我们为玩家新建私有变量“大小”(记得勾选“仅适用于当前角色”)
- 将玩家代码作如下修改:
- 其中,私有变量“大小”用于存放角色缩放前的大小。(因为角色实际大小已经跟随视野缩放了,必须要另外的变量存放之前固定的大小)
- 然后每次循环,将大小设为“大小 * 缩放”;同样,将位置也进行缩放:
注:由于角色本身大小会时刻跟随视野缩放,因此,之后设置大小不再使用原来的大小积木,而是通过变量来设置大小;同理,修改角色地图位置时不再使用原版的移动积木,而是通过变量来修改角色位置:
- 类似的,为敌人角色添加私有变量“大小”,并设置缩放:
- 为背景地图添加类似的代码:
- 这里突破 Scratch 大小限制的相关积木,可以做成自制积木,方便使用。
- 接着,回到摄像头角色,在下面圈起来的代码,添加除以缩放系数:
- 这样做是因为:由于缩放,地图上的距离d * 缩放系数 = 映射到舞台上的距离 d';
- 反过来,舞台上的一段距离 d' / 缩放系数 = 地图上的距离d
- 因此,舞台鼠标坐标/缩放系数,才能得到地图上对应的距离;同样,屏幕半宽 320/缩放系数,才能得到舞台上的 320 在地图上对应的距离。
- 最后,我们可以在摄像头中添加下面的代码。这样,就可以通过鼠标滚轮控制缩放的增减:
下面的 “按下↑/↓” 键,除了可以侦测键盘的 ↑、↓ 按键,也可以侦测鼠标上下滚轮。
最终效果:通过鼠标滚轮可以控制视野的缩放:
代码优化:
这样的缩放效果不够丝滑,我们可以通过下面的写法,实现更丝滑的缩放:
- 新建变量“摄像头目标缩放”,表示摄像头缩放的目标值;
- 然后,将对“摄像头缩放系数”的修改都改成对“摄像头目标缩放”的修改;
- 最后,让“摄像头缩放系数”非线性逼近“目标缩放”值(也就是类似之前让摄像头丝滑跟随玩家的做法)
效果:
你也可以添加类似下面的代码,按下 F 键,就放大视野,实现类似望远镜的效果:
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=STG202/Arkos/Lec2/02&type=comment"
title="{射击2-实现视野缩放}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>