Scratch

状课网-少儿编程网课专业平台

Scratch 跟我学scratch编程:超级玛丽(二)

发布时间:2021-11-29 11:43:11 浏览 0

  今天是高考的日子,祝愿所有的考生都能取得好成绩。之前听很多做编程教学的机构都在宣传说编程已经开始纳入高考,不知道是真还是假。不过CC哥觉得如果是学理科的学生,倒是真的有必要学一下编程,对未来个人的发展还是很重要的。当然不要耽误正常的学习,毕竟你再喜欢编程,如果没有考上大学,那编程也就没意义了。让我们看看超级玛丽的第二讲都新增了什么内容:

  1:多了金币,马里奥可以吃金币。

  2:多了小怪兽,马里奥可以跳过小怪兽,也可以撞飞小怪兽。

  3:多了分数,在程序的上方多了吃金币得到的分数。

  让我们一个一个看看每一个内容的难点和设计思路:

  吃金币显示金币首先要保证金币必须在路上,而不是在路下。

  金币有跟路平行的,有成弧形分布在半空的。

  金币碰到马里奥就会消失。

  分析:金币跟路很相似,都是属于背景的性质,也就是跟路一样,不断克隆自己,然后跟路一个速度往左移动。跟路唯一的区别就是金币不是连续的,所以克隆也不是连续的。

  所以我们不妨构想一下,金币的主体,始终保持在屏幕的最右边,然后始终保持在路的上面,然后根据程序设计,间断的克隆自己。同时随机的跃起,在跃起的同时不断克隆自己,形成了分布在空中的金币。

  让我们看看程序怎么设计的,程序分成三个部分:

  1:第一个部分是保证角色主体始终在屏幕的右边,并保持在路上面,而且能够随机跃起。

跟我学scratch编程:超级玛丽(二)

  程序里面有三部分,第一部分是保证金币如果在空中会落到路上(相当于金币有重力一样,当路变得向下时,金币也会跟着向下走);第二部分是随机跳跃的程序部分;最后一部分是保证当如果金币碰到路面的时候会上升几步。(相当于金币碰到向上的路时,金币也会向上走,始终保持在路面之上。)

  2:程序第二部分是不断的克隆自己

跟我学scratch编程:超级玛丽(二)

  程序设计的时候把沿着路的金币设定为金黄色,而半空中的金币为紫色。因为颜色不同,代表的分值也不同,编者就另外创建了个角色。这样程序减少了很多判断,同时可读性也比较强。

  (大家注意,克隆不是仅在本角色里才能发生,也可以在一个角色里面去克隆另一个角色。这就是个例子。这样设计虽然方便灵活,但是如果程序复杂的话,你就很难找到你的克隆这个动作到底在程序里面哪一部分被激发的,所以使用的时候还是要注意,尽量把克隆事件的发生还是放在被克隆的角色代码里。)

跟我学scratch编程:超级玛丽(二)

  另外这个技巧大家可以注意一下,这是一种随机数的应用方法,如果你想控制事件发生的几率时,就可以用这个方法。这个程序就是把发生的几率控制在了4%。

  3:第三部分就是让克隆体被克隆出来后不断向左水平移动。同时如果碰到马里奥就发出声音然后消失。

跟我学scratch编程:超级玛丽(二)

  这里面值得大家学习的是碰撞的检测方法。

  我们之前常用的碰撞的检测方法一般有两种:

  碰撞检测的几种方法

  一种是检测碰到角色。优点是编程简单,但是缺点是如果角色造型复杂,程序往往会出现bug。

  第二种是检测碰到颜色。编程也相对简单,但是缺点是要确保碰撞的物体有一个一致的颜色。对于颜色不一致的角色,编程者往往把角色加上一圈纯色的边,比如黑边,就是为了检测碰撞。

  第三种是检测距离,一旦两个角色的距离接近到一定程度,就判断为碰撞。这种方法我们之前用的不多,但是可以说在某些精度要求不高的游戏上,确实效果很好,而且编程简单。这个程序就是用的第三种方法。(这里面检测的是到马里奥影子角色controller的距离)另外金币的动态转动效果是通过一组造型的循环播放形成的。

跟我学scratch编程:超级玛丽(二)

  Purple角色的代码

跟我学scratch编程:超级玛丽(二)

跟我学scratch编程:超级玛丽(二)

  小怪兽小怪兽是从右往左沿着路走的,相对运动来看,小怪兽要比路移动的快,才能显示出小怪兽在路上走的效果。

跟我学scratch编程:超级玛丽(二)

  这组小怪兽走动的效果酷吧,这是由10张造型循环切换才形成的。

  造型切换的延时处理方法——

  角色的动作通常是由造型不断切换形成的,但是为了保证动作自然,所以需要在切换造型的循环里插入等待命令来做延时,如果不插入就会变成奇怪的快动作。但是在此游戏里,并没有用等待命令,而是用了两种方法去来做造型切换的延时。

  第一种:在造型里增加重复的造型。

  第二种:用判断语句还减少造型切换频率。

  之所以不用等待命令,而用这两种方法是为了同步,因为本程序,不论是路,金币,还是小怪物,都需要保证几个角色之间的同步,如果插入等待命令,就会造成角色之间的不同步。

跟我学scratch编程:超级玛丽(二)

  代码长,我把重点的部分摘出来给大家看:

跟我学scratch编程:超级玛丽(二)

  这部分程序先让小怪物移动到路的主路上。

跟我学scratch编程:超级玛丽(二)

  这段判断是用来处理造型切换的延时效果。主循环每三次切换一次造型。

  x坐标每次移动7步,比路快2步,显示出小怪兽在路上移动的效果。

  y坐标每次增加2步,与后面循环里的下降动作配合起来就会处理好保证小怪兽移动的时候能沿着路上下移动。

跟我学scratch编程:超级玛丽(二)

  这段是碰到马里奥的时候的效果。采用距离判断的碰撞检测方法。循环是小怪兽跌落的效果。

跟我学scratch编程:超级玛丽(二)

  这段程序与上面的y坐标向上移动的语句,就能处理好,路向上走和向下走都能保证小怪兽不会离开路。大家自己仔细想想怎么逻辑的细节。

  得分显示屏幕上方的得分显示效果做得非常好,不是用简单的变量显示出来的方法,而是用了特殊的角色来体现。

跟我学scratch编程:超级玛丽(二)

跟我学scratch编程:超级玛丽(二)

  这段显示得分的方法,大家可以把它当成一种标准的方法,通用性非常强。

跟我学scratch编程:超级玛丽(二)

  得分显示是用克隆来实现的,把角色克隆了6次,代表一个6位的数字,同时Numeral是一个该角色的私有变量,用来给每一个克隆体标记。0表示这个克隆体是个位,1代表这个克隆体是十位,2代表这个克隆体是百位,以此类推。

跟我学scratch编程:超级玛丽(二)

  这段程序就是每个克隆体启动时显示得分Score对应的位数的数字。

  这里面看似简单,却有个问题:

跟我学scratch编程:超级玛丽(二)

  细看这个运算公式,如果得分的总位数小于6位,那么这个算式在高位显示的时候,就会出现问题。比如第六位。是十万位,如果score的数字小于6位,

跟我学scratch编程:超级玛丽(二)

  那么这个算式就是个负数。那么Score的第“负数”的字符会是什么呢?如果大家做个测试就会知道,会得到一个空值,就是什么也没有的值。

  那么切换命令切换到一个空值的造型,会得到什么呢?会得到一个造型不切换的结果。

  所以在这段切换造型来显示对应位数数值的代码中,会先有一个切换成0的造型。就是为了保证高位没有数字的时候保证显示“0”。

跟我学scratch编程:超级玛丽(二)

  超级玛丽的游戏就讲完了,当然大家可以自己再根据自己的想法把游戏做得更丰富些。

  文章来源:跟我学scratch编程

本文链接:https://www.ascratch.com/news/17664.html

上一篇:跟我学scratch编程:完美的下落和反弹 下一篇:返回列表