制作完UI,接下来就是主界面了。
地图显示
小猫派对可以在主界面预览到当前选择的地图,并且有视差效果,所以我们需要先更改地图的代码,让地图在进入主界面后显示。
当进入了主界面后,我们让他先显示,接着重复执行移动到鼠标的坐标*0.1,没错,视差其实很简单,就是“视差目标*视差比例”,然后在循环中设置他的造型为当前选中的造型,因为我们要让玩家随时看见我们切换的造型。
因为我们在主界面运用了循环,在进入游戏后他不会停止,为了在主界面能让他不再循环,所以我们要改改之前写的代码:
我们添加了一个停止该角色的其他脚本,这样视差的循环就会停止运行了,就可以继续初始化了。
接着是地图碰撞箱,因为碰撞箱在主界面完全不重要,所以我们将它隐藏:
标题动效
然后我们创建一个新的角色,专门用来显示主界面的一些基本信息,同样的,造型从小猫派对中扣:
把这个角色放入UI文件夹后,接着开始写代码:
主界面其实可以看见有四个角色,分别是:
- 左切换地图
- 右切换地图
- 开始游戏
- 标题
有了这些,我们下面要制作的就是这几个角色。
我们用本体来作为标题,用多莉的克隆体ID来控制克隆体的行为:
当收到主界面,我们就开始初始化,显示并移动到最前面,接着开始克隆克隆体,克隆体克隆完毕后设置造型和大小。
接着在重复执行中做视差和旋转。
观察小猫派对的旋转,他是很丝滑的,在中间最快,两边最慢。
没错,这还是使用三角函数制作的效果,让我们改一下之前的公式,就直接可以用了。
按钮功能
接下来,我们来做克隆体的代码:
如果是开始游戏的克隆体,我们就先初始化,切换到开始游戏造型,然后重复执行视差移动和如果碰到鼠标并点击,就开始游戏。
因为开始游戏是多人游戏,所以这里我们使用MMO的加入或创建积木进入id为当前选择地图的服务器,并且等待链接成功。
接着,我们开始广播“开始”。告诉程序,我们的游戏开始了。
左和右的切换的代码几乎是一样的,都是
先切换造型,然后重复执行视差和碰到鼠标并按下,不过一个是增加地图,一个是减少地图。
这里为了按下鼠标重复增加地图,我们需要保持等待直到按下鼠标不成立。
因为我们切换了地图,这个地图很可能不存在,所以我们需要保证这个地图是在一个范围内的。
这个范围就是我们地图贴图的造型数量。
但是scratch不可能获取到一个角色的造型数量,怎么办呢?
因为角色在切换造型的时候,如果带入的值超过这个角色的造型数量或者小于0,则会循环到一个存在的造型。
一个非常实用的特性,所以这里我们只需要设置为他匹配过后的造型就行了。但是我们怎么知道他有没有切换造型为地图变量呢?
这就需要用到另外一个特性了!
当“等待0秒”被执行,他会先等待,然后在下次回到这个积木的时候,他会发现,0秒已经过去了,所以就会继续执行下面的积木。
也就是说,“等待0秒”积木,其实就是等待游戏里面的一帧。
而scratch中一帧,就代表着所有代码都被执行了一次,所以这里我们等待0秒,保证地图贴图的造型已经被设置。
接下来我们就可以把地图设为地图的造型了。
我们想让按钮都有缩放的功能,所以我们再新建一个“当克隆体启动时”积木:
专门开个循环来处理缩放,就不需要每个克隆体都重新写了。
接下来我们想让玩家进入地图后,游戏主界面的按钮消失,编写以下代码:
这个代码会先停止其他代码的执行,保证这个角色/克隆体没有其他代码的执行了,就会利用缓动公式让按钮慢慢变到最小,然后隐藏角色,本体和克隆体此时都看不见了。
但是克隆体不能一直留着,所以这里我们需要删除克隆体。
最后我们为背景添加一些初始化代码:
保证进入游戏后会进入主界面。
其他设置
但是这时按下返回按钮,我们会发现,摄像机还没有还原。
这就需要我们重置一下摄像机了:
首先保证抖动的循环停止,我们停止其他脚本,然后设置抖动强度为0,接着停止摄像机跟随玩家的行为,最后我们重置他的坐标为0。
最后,我们给所有在游戏界面才会显示的角色加上这段代码:
有以下角色:
- 玩家
- 碰撞箱
- 武器
- 子弹
效果如下:
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=WhiteCat101/baimao/Lec4/02&type=comment"
title="{小猫4-主界面}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>