Scratch小猫弹簧床
2020-11-16
游乐园的弹簧床你有没有看到过,小朋友在弹簧床上跳来跳去,弹簧床会根据跳起的高度反馈一个向上的力,之后反馈的力就会慢慢变小。今天我们就用Scratch来模仿一下弹簧床吧。
一、需求分析
弹簧床的反弹效果和之前我们讲过“打砖块”的反弹效果不同,“打砖块”小球的速度是匀速的,但是弹簧床就用到了上期我们讲到的重力加速度——下落的时候逐渐加速,遇到弹簧床后,下落速度逐渐减小到0,然后反弹加速上升,离开弹簧床后上升速度逐渐减小到0,又重复开始下降过程,并且弹簧床恢复水平。
为了表现弹簧床受到压力向下凹陷的效果,当小猫向下跳时,弹簧床需要有一个明显的形变过程,并且这个变形需要与小猫的下落同步。
因此程序难点包括需要解决弹跳过程中的速度变化,判断角色何时碰到弹簧床,弹簧床要随情况变形。
二、弹簧床代码
我们就用画笔来绘制弹簧床。设置颜色(粉色),笔的粗细(6),画笔从左侧(-240,0)落笔画到右侧(240,0)抬笔,这样一条直线就来了。
为了实现弹簧床受到小猫下压后形变的过程,我们在弹簧床的中间增加一个途经点,这个点的坐标就是小猫的脚下,需要在小猫造型中将角色中心移到小猫脚下。
还需要注意,当小猫的纵坐标小于0的时候才产生形变,纵坐标大于0不形变,还是画直线(图1)。
当小猫y坐标小于0时,画笔从左侧(-240,0)落笔画到小猫角色的(x,y)坐标,再画到右侧(240,0)抬笔(图2)。
弹簧床代码(图3):
三、小猫代码
小猫的弹跳过程与自由落体中的小球类似,只不过加速度是逐漸变化的。
设置小猫的大小,起始位置,旋转方式为不可旋转。设置初始方向(面向0°方向)。新增变量“速度”用于控制小猫下降和反弹的速度。由于重力加速度的原因,当向下掉落的时候速度是越来越快的(速度负数表示向下,速度正数表示向上),当小猫碰到弹簧床的时候就产生一个反弹力,用直线的颜色判断是否碰到弹簧床。速度的快慢是由速度绝对值来决定的(图4)。
当我们将程序编写完运行之后,就可以看到弹簧床的效果,之前的三点需求都已经解决了。
我们还可以在此基础上添加功能,比如通过左右键和空格,控制小猫在弹簧床上表演一些杂技……