如何用scratch制作跳一跳
分解目标:
阶段:实现当鼠标按下的时候“小人”能够发生形变蓄力,同时有声音。
第二阶段:松开鼠标声音停止,“小人”跳出去,根据蓄力的时间长短控制“小人”跳的远近。
第三阶段:“小人”跳跃成功的判断。
第四阶段:盒子的处理,“小人”在成功跳跃到下一个盒子上时,盒子与“小人”能够同时向左侧移动,然后再出现下一个盒子,然后这样一直重复下去。
第五阶段:计分,跳跃成功+1分,如果落在盒子中心+2分。
制作中的那些坑:
阶段的目标相对比较简单,“小人”有多个造型,在鼠标按下的时候,让“小人”的造型按顺序切换,即实现了形变的效果。那么这个过程中有一个小坑,不是所有时间只要按下鼠标就要让“小人”变形,比如我们开始运行时就要点击绿旗,此时肯定不能去执行形变;“小人”在空中跳跃时点击鼠标也是不被允许的。同时执行的另一个工作就是在“小人”发生形变的同时要播放音乐,鼠标松开要停止这一切。因此这里我使用了一个“music”变量,通过对这个变量的改变来控制音乐。
下来进入第二阶段,相对没有什么难度,跳跃分为两个步骤,起跳:同时改变x,y坐标,实现向上向右的移动,下落同理。跳的远近可以在步根据鼠标按下的时间长短(music变量有个变化)来作为一个参考值。
第三阶段:跳跃成功判断,首先我们要有第二个落脚点,思路很简单,在开始的时候克隆一个盒子,随机放在同一水平位置。如果克隆体碰到“小人”,成功;否则失败。这里又遇到一个问题,一开始就提示失败,因为此时“小人”还没跳,自然不会碰到克隆体。因此又需要一个变量“status”,来判断“小人”是起跳前还是起跳后。只有在起跳下落后再进行判断成功失败。貌似问题这么容易就解决了,但是忽略了一个问题,如果“小人”起跳下落后还在起始的那个盒子上,这样既不能说成功,不能得分,也不能算失败。于是乎我又增加了一个判断条件,判断“小人”与盒子(非克隆体)是否接触。新建变量“接触到本身判断”在下落后先判断与母体的接触,如果接触到母体,不再进行与克隆体的判断。
第四阶段:“小人”终于完成了步的大跳跃,下来我们要把克隆体的盒子和“小人”一起向左侧移动,再克隆一个新盒子,如此一直重复下去。克隆体移动很简单,直接移动到母体盒子的初识位置即可,“小人”需要同步移动,这里首先要使用一个变量“克隆体x坐标”用它来记录克隆体位置的x坐标,便于计算出“小人”要往左移动的距离,得到终点坐标,让“小人”移动过去;母体在在克隆体移动的同时也左移,如果碰到边缘就隐藏。
目前看似一切都比较顺利,但是不知不觉又入了另一个坑,当成功完成次跳跃后,进行第二次跳跃判断时问题来了,此时“小人”就在一个克隆体盒子上,如何判断跳跃到下一个克隆体上,还是落在了自身克隆体上?怎么区分两个克隆体?此处尝试了很多种办法,终都不理想,那么是时候改变思路了,既然无法区分两个克隆体,那就只留一个克隆体,至少区别克隆体和母体还是可以做到的。于是乎,我修改了左移盒子的思路,左移开始的时候把母体盒子隐藏,克隆体移动到左侧,此时删除掉克隆体,将母体切换到克隆体同一个造型(新建变量“克隆体造型”记录克隆体的造型)显示,这样母体盒子就替代了之前的那个克隆体,肉眼是看不出来的,此时问题就解决了。
一步:增加计分变量,这里就比较简单了,跳跃成功呢+1分,如果跳跃落点与克隆体盒子的中心点距离小于5我们就+2分。至此这个游戏基本上就完成了,后来我还增加了落到盒子边缘的判断,原理就是判断落点与盒子中心的距离,也没有什么难度。