資訊內容
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高手
