超级马⾥奥的编程素材_超级马⾥奥:跳跃和地⾯侦测
授权转载 | scratch思维训练 gh_4c8856b43407
scratch编程优秀作品
原⽂作者 | 冰⽐冰⽔冰
原⽂标题 | 少⼉创意编程(特53)跳跃和地⾯侦测
标签:难度中级;游戏;侦测;坐标;⾓⾊;颜⾊;跳跃;地⾯侦测;
作为scratch少⼉编程的爱好者和从业者,相信⼤家都玩过或做过超级马⾥奥这个作品。
今天我们就⽤超级马⾥奥作为素材,来探讨跳跃以及地⾯侦测的问题吧!
⼀、跳跃
⾓⾊的跳跃是很多scratch游戏或作品中必不可少的环节,跳跃可以躲避敌⼈的攻击,或者到达⽔平移动不能抵达的地⽅……跳跃的⽅法有很多种,最简单的是匀速上下移动,程序如下图。
在上⾯跳跃的两种⽅法中,⾓⾊都是在原位置上下匀速移动,在起点和最⾼点不变的情况下,可以修改积⽊块中的滑⾏时间或者重复执⾏次数来改变其运⾏速度。这两段程序⾮常简单,但有⼀些问题:⼀是跳跃是匀速的,不符合⽣活常识和物理规律;⼆是起点和落点是同⼀⽔平线,如果地⾯不平的情况下就没法实现效果了。
上图的程序是跳跃最常⽤的⽅法:⾓⾊在空中时马⾥奥的y坐标增加其垂直速度,垂直速度不断减1,为了避免马⾥奥的下降速度太快影响地
⾯的侦测,我们对垂直速度的最⼩值进⾏了限制,为-8。上图程序并未进⾏地⾯的设置,因此在任何情况下按下上移键,马⾥奥都可以向上跳跃,因为此时垂直速度的值设为了15。
⼆、地⾯侦测
在完成了跳跃程序的设置后,接下来我们⽤多种⽅法来进⾏地⾯侦测。 1、坐标。
我们设置地⾯为y坐标等于-125,当马⾥奥的y坐标⼤于-125时,它的垂直速度⼀直减少,并且y坐标增加垂直速度;当马⾥奥的y坐标等于或⼩于-125时,我们设置其y坐标为-125,同时垂直速度设为0。在地⾯的情况下,我们按下上移键,马⾥奥会跳起并落下。此时,马⾥奥的跳跃解决了匀速上下移动的问题。马⾥奥在地⾯时,我们按下上移键,它以15的垂直速度向上移动,同时垂直速度不断减⼩;当垂直速度减为0时,马⾥奥跳到了最⾼点;垂直速度继续减⼩并成为负数,马⾥奥从向上移动变为向下移动,并且速度越来越快;当马⾥奥到了地⾯,垂直速度设为0。这也是马⾥奥⼀次跳跃的全过程。
如果我们对程序稍作修改,马⾥奥跳跃的前提不需要在地⾯时,如上图程序。这样的设置可以让马⾥奥在空中不限次数连续起跳。
在上图的程序中,我们对马⾥奥的连跳进⾏了限制,在空中最多只能连跳2次。 我们设置了变量次数,按下上移键,次数便增加1,落到地⾯次数恢复为0,只有次数⼩于等于2的情况下才能起跳。 ⽤坐标的⽅法侦测地⾯,虽然可以实现马⾥奥的跳跃,但地⾯必须是同⼀⽔平线,对游戏或作品的限制颇多。 2、颜⾊。
在上图的程序中,我们使⽤了颜⾊来侦测地⾯。当马⾥奥在下降的过程中碰到某⼀颜⾊,我们认为它碰到了地⾯,此时让其停⽌下降,并且在碰到此颜⾊的情况下可以起跳。当然,我们可以修改程序的位置,让马⾥奥可以在空中连续起跳,甚⾄限制起跳次数。
与坐标侦测相⽐,颜⾊侦测的优势是地⾯不再要求是统⼀⽔平线,可以⾼低不平。但其依然有很多问题,⽐如作为地⾯的颜⾊必须统⼀;当马⾥奥的头碰到地板的颜⾊,马⾥奥会缓缓上升到地板上⾯,或者直接穿⾏到地板上⾯……⾄此,我们解决了跳跃匀速的问题和地⾯必须⽔平的问题,能否再更进⼀步呢? 3、⾓⾊。
在上图的程序中,我们使⽤了⾓⾊侦测的⽅法来判断地⾯。右侧程序上移键的作⽤依然是让马⾥奥站在地⾯时跳跃,不同之处在于马⾥奥要先将y坐标下降1,再上升1,为什么呢?原因是⾃定义模块地⾯侦测。当马⾥奥碰到⾓⾊地板后,它是上升状态则y坐标下降,它是下降状态则y坐标上升,直到离开地板为⽌;并且此时垂直速度要设为0。所以当马⾥奥跳跃时, y坐标要先下降1从⽽碰到地板,这样才能满⾜起跳 条件 。
这⾥为什么要使⽤⾃定义模块呢?如上图,我们要使⽤⾃定义模块中运⾏时不刷新屏幕的功能。此功能有什么作⽤,⼤家可⾃⾏体会。
⾓⾊侦测地⾯的⽅法可以有效解决马⾥奥头碰到地板然后上升或者穿⾏⾄地板上的问题,它碰到地板
会先将垂直速度设为0,然后⾃⾏下降。同时新的问题出现了,当马⾥奥碰到地板的两侧时,会迅速移动到地板的上⾯,有没有解决的办法? 4、⾓⾊位置⽐较。如何才能解决上述问题呢?我们可以⽐较两个⾓⾊之间的位置。
如上图所⽰,当马⾥奥的⽔平位置在上图2个马⾥奥之间,并且垂直位置和上图2个马⾥奥的位置相同时,我们就可以设定马⾥奥在地板
上,否则马⾥奥不在地板上。
在上图的程序中,92是马⾥奥和地板两个⾓⾊长度的⼀半,33是两个⾓⾊⾼度的⼀半;x坐标和y坐标指的是地板的坐标。当马⾥奥在地板上的值为1时表⽰马⾥奥在地板上,此时其停⽌下降,并且按下上移键可跳跃;当马⾥奥在地板上的值为0时表⽰马⾥奥在空中,此时马⾥奥或者上升或者下降。⾄此,我们终于完美的解决了跳跃和地⾯侦测的问题。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。