Scratch教学——完美的下落和反弹

1:匀速下坠

先来看下落,一个最简单的下落程序是这样的:
Scratch教学——完美的下落和反弹
2:下坠配上加速度。

这个也不复杂,让每一次循环的时候都将下落速度增加一点,这样就有加速度的效果了。
Scratch教学——完美的下落和反弹
3:碰到黑线刚好停住。

如果解决这个问题,解决的方法就是让小球再退回到黑线的上方。我们这时候并不知道小球应该退后多少步,所以只能一步步试,直到小球和黑线分离。

我们加了一段程序,如果小球碰到了黑色那么就执行一个循环,让小球回到黑线上方。
奇怪不?小球在向上后退离开黑线后为什么又掉了下来,然后在黑线上反复震动?其实在做碰撞处理的时候这是经常会出的一个bug。

我们仔细读程序,就会发现,在这个循环里的判断逻辑是这样,如果没有碰到黑线,就往下落。每一步下落的距离就是“下落速度”这个变量的值。如果碰到黑线,就往上后退,直到离开黑线。那大家有没有发现,这个逻辑其实就是个死循环。小球永远不可能停下来。

我们修改一下程序,重新把逻辑判断的位置调整一下,同时再加上一条关键语句。
Scratch教学——完美的下落和反弹
逻辑判断调整成,在每一步下落时都判断是否碰到黑线,如果碰到黑线后就后退,后退完毕后又增加了一条语句,让小球再下降一步,保证小球和黑线接触上。小球再下降一步就是一个关键语句。然后大循环就终止了。大家再好好理解一下。

但是大家发现没有,这样效果还是不好,小球在返回黑线上方有个过程,我们已经没有加等待命令了,这已经是最快的方式了。但是这个过程还是让人不舒服。(有人在返回黑线上方的操作做的更复杂些,比如一次退回更多步数,比如一次退10步,如果退过了,再返回5步,这种反复趋近的操作也是一种办法。但是程序复杂不说,效果也不好)那如何解决这个问题呢?

这里教大家一种方法,用自定义命令的方式。把后退的操作用一个单独的自定义命令来做。
Scratch教学——完美的下落和反弹
Scratch教学——完美的下落和反弹
转自:https://www.china-scratch.com/news/5330