最新消息:

少儿创意编程(特53)跳跃和地面侦测

Scratch 少儿编程 2712浏览 0评论

友情提示:视频教程观看时请手动设置清晰度。

作为Scratch少儿编程的爱好者和从业者,相信大家都玩过或做过超级马里奥这个作品。

今天我们就用超级马里奥作为素材,来探讨跳跃以及地面侦测的问题吧!

少儿创意编程(特53)跳跃和地面侦测

一、跳跃

角色的跳跃是很多Scratch游戏或作品中必不可少的环节,跳跃可以躲避敌人的攻击,或者到达水平移动不能抵达的地方……
跳跃的方法有很多种,最简单的是匀速上下移动,程序如下图。

少儿创意编程(特53)跳跃和地面侦测

少儿创意编程(特53)跳跃和地面侦测

在上面跳跃的两种方法中,角色都是在原位置上下匀速移动,在起点和最高点不变的情况下,可以修改积木块中的滑行时间或者重复执行次数来改变其运行速度。
这两段程序非常简单,但有一些问题:一是跳跃是匀速的,不符合生活常识和物理规律;二是起点和落点是同一水平线,如果地面不平的情况下就没法实现效果了。

少儿创意编程(特53)跳跃和地面侦测

上图的程序是跳跃最常用的方法:角色在空中时马里奥的y坐标增加其垂直速度,垂直速度不断减1,为了避免马里奥的下降速度太快影响地面的侦测,我们对垂直速度的最小值进行了限制,为-8。
上图程序并未进行地面的设置,因此在任何情况下按下上移键,马里奥都可以向上跳跃,因为此时垂直速度的值设为了15。

二、地面侦测

在完成了跳跃程序的设置后,接下来我们用多种方法来进行地面侦测。
1、坐标

少儿创意编程(特53)跳跃和地面侦测

我们设置地面为y坐标等于-125,当马里奥的y坐标大于-125时,它的垂直速度一直减少,并且y坐标增加垂直速度;当马里奥的y坐标等于或小于-125时,我们设置其y坐标为-125,同时垂直速度设为0。在地面的情况下,我们按下上移键,马里奥会跳起并落下。
此时,马里奥的跳跃解决了匀速上下移动的问题。马里奥在地面时,我们按下上移键,它以15的垂直速度向上移动,同时垂直速度不断减小;当垂直速度减为0时,马里奥跳到了最高点;垂直速度继续减小并成为负数,马里奥从向上移动变为向下移动,并且速度越来越快;当马里奥到了地面,垂直速度设为0。这也是马里奥一次跳跃的全过程。

少儿创意编程(特53)跳跃和地面侦测

如果我们对程序稍作修改,马里奥跳跃的前提不需要在地面时,如上图程序。这样的设置可以让马里奥在空中不限次数连续起跳。

少儿创意编程(特53)跳跃和地面侦测

在上图的程序中,我们对马里奥的连跳进行了限制,在空中最多只能连跳2次。我们设置了变量次数,按下上移键,次数便增加1,落到地面次数恢复为0,只有次数小于等于2的情况下才能起跳。
用坐标的方法侦测地面,虽然可以实现马里奥的跳跃,但地面必须是同一水平线,对游戏或作品的限制颇多。
2、颜色。

少儿创意编程(特53)跳跃和地面侦测

在上图的程序中,我们使用了颜色来侦测地面。当马里奥在下降的过程中碰到某一颜色,我们认为它碰到了地面,此时让其停止下降,并且在碰到此颜色的情况下可以起跳。当然,我们可以修改程序的位置,让马里奥可以在空中连续起跳,甚至限制起跳次数。

少儿创意编程(特53)跳跃和地面侦测

与坐标侦测相比,颜色侦测的优势是地面不再要求是统一水平线,可以高低不平。但其依然有很多问题,比如作为地面的颜色必须统一;当马里奥的头碰到地板的颜色,马里奥会缓缓上升到地板上面,或者直接穿行到地板上面……
至此,我们解决了跳跃匀速的问题和地面必须水平的问题,能否再更进一步呢?
3、角色。

少儿创意编程(特53)跳跃和地面侦测

在上图的程序中,我们使用了角色侦测的方法来判断地面。
右侧程序上移键的作用依然是让马里奥站在地面时跳跃,不同之处在于马里奥要先将y坐标下降1,再上升1,为什么呢?
原因是自定义模块地面侦测。当马里奥碰到角色地板后,它是上升状态则y坐标下降,它是下降状态则y坐标上升,直到离开地板为止;并且此时垂直速度要设为0。
所以当马里奥跳跃时,y坐标要先下降1从而碰到地板,这样才能满足起跳条件

少儿创意编程(特53)跳跃和地面侦测

这里为什么要使用自定义模块呢?如上图,我们要使用自定义模块中运行时不刷新屏幕的功能。此功能有什么作用,大家可自行体会。

少儿创意编程(特53)跳跃和地面侦测
角色侦测地面的方法可以有效解决马里奥头碰到地板然后上升或者穿行至地板上的问题,它碰到地板会先将垂直速度设为0,然后自行下降。
同时新的问题出现了,当马里奥碰到地板的两侧时,会迅速移动到地板的上面,有没有解决的办法?
4、角色位置比较。
如何才能解决上述问题呢?我们可以比较两个角色之间的位置。

少儿创意编程(特53)跳跃和地面侦测

如上图所示,当马里奥的水平位置在上图2个马里奥之间,并且垂直位置和上图2个马里奥的位置相同时,我们就可以设定马里奥在地板上,否则马里奥不在地板上。

少儿创意编程(特53)跳跃和地面侦测

在上图的程序中,92是马里奥和地板两个角色长度的一半,33是两个角色高度的一半;x坐标和y坐标指的是地板的坐标。
当马里奥在地板上的值为1时表示马里奥在地板上,此时其停止下降,并且按下上移键可跳跃;当马里奥在地板上的值为0时表示马里奥在空中,此时马里奥或者上升或者下降。
至此,我们终于完美的解决了跳跃和地面侦测的问题。

转自公众号:
临汾南城教辅中心

您必须 登录 才能发表评论!