Scratch少儿编程第77讲-自动确认路径轨迹
CC哥在用Scratch编程的时候,也会经常遇到各种问题,有些问题是编程的bug,但是也有很多问题不是编程的问题,是Scratch本身的局限性造成的。不过正是这种局限性才是启发思维和创造的动力。
CC哥在之前讲座的时候曾经想对不规则图形进行涂色,这个过程遇到了很多问题,比如难点之一是如何确认不规则图形的内部点,CC哥还没有解决掉。不过在攻关过程中,CC哥解决了不规则图形的轮廓轨迹确认的问题,可以今天跟大家分享一下。
先看看小例子:
大家看到没,小企鹅是沿着蓝色的路径轨迹在行走,并且一直走到绿旗的终点。这个路径是完全不规则的,那么怎么实现呢?
轨迹角色
首先是路径角色,这个是CC哥自己画的。路径的难点在于程序如何去确认起点和终点。有几种方法:
1:用线扫描的方法,CC哥的起点确认就是用了从左到右,从上到下的线扫描的过程。但是用这个方法就需要,你的起点要是整个图形的最左边。如果不是的话就无法确认了,比如下图:
如果用线扫描,那么得出的起点就是画圈的部分,因为这个点才是图形的最左端。
2:第二种方法就是设定起点参照物,然后找出离参照物最近的点,不过这个方法CC哥没有去做,大家如果有兴趣的话可以自己试试。(这种方法就是要先找外轮廓的轨迹,然后每一个点去比较和参照物的距离,然后再确认起点和终点)
轨迹记录角色
这个轨迹记录的角色,就是一个小红点,CC哥是用这个小红点去找出路径的轨迹的。这个小红点的大小也非常有关系,不能太小和太大,否则的话很容易陷入死循环,这就是Scratch本身的限制导致的。
其他的企鹅,岩石,旗子都是辅助角色,没必要特别介绍了。
程序设计的逻辑
做这个程序跟走迷宫的程序有些类似,需要用递归的方式处理。
1:先找到路径的起点。
2:沿着起点进行路径轮廓的扫描。
在轨迹扫描的时候要知道如何判断扫描结束,在这里CC哥用了一个绿旗子作为扫描的终点,这是最简单的方法。
CC哥用了一些自定义的积木来实现扫描过程,CC哥用的是走迷宫的逻辑来记录轮廓轨迹:
1:先判断左手边是否为路径,2:如果左手边已经为路径了,那么再判断前方是否为路径。3:如果前方也是路径了,那么判断右方是否为路径。4:如果右方还是路径的情况下,继续判断右方。这些判断一旦为否,那么全部回到第一步,确认左边是否为路径。
这部分代码就是这个逻辑。
在这里,CC哥用了列表记录轨迹,轨迹坐标是X,和Y轴的坐标组成,所以要记录轨迹坐标,就需要两个列表,一个列表用来存X轴坐标,一个列表用来存Y轴的。(程序种轨迹列表,和外部轮廓列表实际都是一样的,大家自己做的时候可以只用一个就行了。)
确认外部轮廓首先要找到一个起点,起点用线扫描的程序来做,这部分CC哥不介绍了,就是让小红点角色从上左到右,从上到下一步一步的走,当碰到路径的时候,就开始调用调用上面的代码进行路径的轮廓轨迹确认和记录。
这段主程序因为CC哥开始做的时候有其他的编程目标,所以写的有点复杂,大家可以照着自己的思路做。
企鹅行走编程
企鹅的程序不复杂,就是沿着轨迹的坐标一步一步走就好了,轨迹就是列表里的坐标。
需要注意的是:
1:在路径轨迹扫描的过程中,不要有角色挡住路径,否则路径扫描就会不完整。无法得到完整的路径。所以先要把企鹅隐藏掉,等轨迹记录完之后再显示出来。
2:企鹅角色有一个朝向的问题,所以CC哥根据每一步是往前走还是往后退,来设定角色的朝向,是朝前还是朝后。大家注意X和X1这两个变量就是用来判断前一步和后一步的关系。
本讲座的目标
本篇讲座的目标就是让大家学会如何根据颜色进行轨迹扫描,可以用在走迷宫,形状的轨迹确认,以及角色走不规则的路径等。
另外,假设我把颜色判断改成了角色碰撞的判断,同时把轨迹角色设置成透明,那么你就会发现企鹅会沿着一条你看不见的路径在行走,是不是也有意思呢?
·END·
跟我学Scratch编程不用花钱成为Scratch高手
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com