前面我们介绍了如何在Scratch游戏中添加血条显示(“血量条”:用Scratch制作血量条的方法+源码、“血量圈”:用Scratch制作血量圏的方法+源码)。
今天我们想想一个游戏还有什么重要的功能需要实现?
在手游中往往需要用拇指来搓屏幕,从而控制角色的移动方向,我们管这个功能叫做手游的“角色方向虚拟控制器”或“虚拟摇杆”。
如果我们想给Scratch游戏添加这样的虚拟控制器,应该怎么办呢?
一般而言,虚拟控制器是固定在左下角的。虽然有少数游戏需要让虚拟控制器变换位置,但今天我们只说固定位置这种情况的做法。
1. 设置角色
我们添加这样的几个角色:游戏角色,摇杆底盘和摇杆中心。
游戏角色小猫上,只放上简单的代码,让它读取方向变量的值,调整自己方法前进就可以了。
摇杆底盘上,不必写任何代码。关键在摇杆中心上。
2. 设置摇杆
在编写代码前,一定不能操之过急,立即投入编程工作。需要先思考,摇杆这一功能,需要使用哪些外部信息,自己又可以为别人提供什么信息。
把任何要实现的功能,都看作一个“输入—输出”模型。
摇杆的“输入—输出”模型怎么来呢?因为摇杆中心需要时时刻刻向鼠标指针移动,又时时刻刻指挥小猫的移动方向,所以它需要知道鼠标坐标这一外部信息,以及为小猫提供一个方向变量。
又因为我们这里将摇杆底盘和摇杆中心分成了两个角色,那么摇杆底盘对摇杆中心来说,也是外部了。
从整体上,我们将建立“计算底盘到鼠标距离”和“计算方向”两个自定义积木,以供主程序使用。在摇杆中心的主程序上,控制只有在鼠标按下,且鼠标到底盘距离小于某一个数值,摇杆中心到鼠标距离大于某一数值时才执行操作。最后一个条件的目的是,防止摇杆中心颤动。
现在就只剩下这两个自定义积木的编写了。
之所以要自己写一个积木计算底盘到鼠标的距离,是因为我们积木工具箱中,只有当前角色到鼠标的距离,而没有另一个角色的:
“计算底盘到鼠标距离”涉及勾股定理,用代码块表示为(代码挺长的,请旋转手机屏幕查看):
这个值也可以在摇杆底盘中,用一个变量设为“到鼠标的距离”来得到,时时更新这个变量,再到摇杆中心这边使用。
“计算方向”是必须要有的,找不到其他迂回解决的方法。根据atan代码块的值和Scratch中方向的匹配情况,可以写出下面的四种情况:
但实际上,一个角度+360后,实际上与原角度所指的方向一样,第一种和第三种是一样的。因此可以简化为:
这样就完成了整个任务。
最后补充一点。大家可能想说,我又何德何能可以把自己做的Scratch放到手机上玩呢?
这点可以参考:如何将scratch游戏打包成APP()。