scratch可以用来制作小游戏,奔跑与跳跃是游戏中较为常见的动作。在实际生活中,因为受重力的影响,我们的跳起动作会逐渐减速,直至失去动力,然后转入加速坠落的过程。为了在游戏中展现这种过程,我们往往会在scratch模拟重力的影响。
重力模拟的实现
假设初始速度为10,让初始速度逐渐降低,最后降为0,体现在游戏中,我们会设置一个变量,根据变量值抬高角色坐标,然后让这个变量每次自减1,继续下一次抬高。因为每次抬高角色的时间相同,而高度逐渐减少,就模拟出了一种减速的效果。
掉落的过程则反其道而行之,初始速度是0,逐渐加速,直至角色落地或碰到落脚处。但这样做有一个弊端,当速度越来越快的时候,一次性让角色的y坐标下降10几乃至20几个点,容易造成角色的穿越现象,比如角色的半截身体埋进了屏幕边缘。假设掉落的时候设置成碰撞到另一个角色停止,碰撞位置在y坐标-100,如果上一次的移动刚好停留在-99,不能满足碰撞条件,所以会继续下落,此时如果继续下落-10,那么最终停止的位置就是-109,角色实际位置会远低于预期掉落的位置。
为了避免这种现象,可以考虑用自定义积木来模拟受重力下降的过程,逐坐标点检测碰撞与否,因为自定义积木允许不刷新屏幕,所以虽然碰撞检测的次数变多了,并不会对游戏流程造成太大的影响。
程序如上。碰撞检测的过程略过了屏幕刷新以加快进度,而掉落过程仍旧参与到正常的刷新过程中。这里的碰撞设置了两个条件,到达屏幕边缘时或碰到角色2时,停止继续掉落。
测试文件的使用方法
将动画小猫用鼠标摆放至高处,然后点击绿旗,小猫会加速下落,遇到角色2或屏幕底部,下落准确停止。