Scratch模拟重力与碰撞检测

scratch可以用来制作小游戏,奔跑与跳跃是游戏中较为常见的动作。在实际生活中,因为受重力的影响,我们的跳起动作会逐渐减速,直至失去动力,然后转入加速坠落的过程。为了在游戏中展现这种过程,我们往往会在scratch模拟重力的影响。

重力模拟的实现

假设初始速度为10,让初始速度逐渐降低,最后降为0,体现在游戏中,我们会设置一个变量,根据变量值抬高角色坐标,然后让这个变量每次自减1,继续下一次抬高。因为每次抬高角色的时间相同,而高度逐渐减少,就模拟出了一种减速的效果。

scratch_simulated_gravity_p1

掉落的过程则反其道而行之,初始速度是0,逐渐加速,直至角色落地或碰到落脚处。但这样做有一个弊端,当速度越来越快的时候,一次性让角色的y坐标下降10几乃至20几个点,容易造成角色的穿越现象,比如角色的半截身体埋进了屏幕边缘。假设掉落的时候设置成碰撞到另一个角色停止,碰撞位置在y坐标-100,如果上一次的移动刚好停留在-99,不能满足碰撞条件,所以会继续下落,此时如果继续下落-10,那么最终停止的位置就是-109,角色实际位置会远低于预期掉落的位置。

scratch_simulated_gravity_p2

为了避免这种现象,可以考虑用自定义积木来模拟受重力下降的过程,逐坐标点检测碰撞与否,因为自定义积木允许不刷新屏幕,所以虽然碰撞检测的次数变多了,并不会对游戏流程造成太大的影响。

scratch_simulated_gravity_p3

程序如上。碰撞检测的过程略过了屏幕刷新以加快进度,而掉落过程仍旧参与到正常的刷新过程中。这里的碰撞设置了两个条件,到达屏幕边缘时或碰到角色2时,停止继续掉落。

测试文件的使用方法

将动画小猫用鼠标摆放至高处,然后点击绿旗,小猫会加速下落,遇到角色2或屏幕底部,下落准确停止。

scratch模拟重力

给TA赞助
共{{data.count}}人
人已赞助
综合资讯

Scratch求连续自然数1+2+3+...的和

2023-7-29 8:21:57

综合资讯

为树莓派安装一个CentOS系统

2023-7-29 8:22:02

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索