分身管理

分身管理 1 - Scratch老師就要會管

Scratch 的分身是個最重要的技巧,初學時雖然很排斥,一旦學會了就發現很好用。然而使用分身還有很多地方要注意,很多書都沒有教,甚至不會教怎麼善用分身,就讓傑夫老師從最基礎的部分開始來為各位說明。

說到分身,那要先提什麼是「本尊」。

中間沒有變色的是「本尊」,移動本尊會改變屬性區的參數,分身不會

中間沒有變色的是「本尊」,移動本尊會改變屬性區的參數,分身不會

「本尊」就是用來產生各個分身的角色,分身會繼承本尊的屬性,然而只有本尊可以在角色屬性區被改變位置、方向等參數;或者反過來,用滑鼠在舞台區中移動會改變到屬性區的參數的,就是本尊。

Scratch 遊戲設計中,通常讓「本尊」隱藏,所有的事情交給分身去做,程式只要寫一次就可以。

再回到前單元中所提的,為何不常使用『建立自己的分身』?所有的 Scratch 書都會提到,因為分身不能用『廣播』建立。如果分身還沒刪除,每個分身都會收到廣播訊息,分身就會以等比級數(2, 4, 8, 16, …)的數量產生。

另外,很多書就沒提到這點了,如果『建立自己的分身』接在『當OO鍵被按下』,也會有一樣的結果。所以,『建立自己的分身』通常用在這個角色的分身不依賴別的角色,例如:出現固定幾個分身或不定時出現的敵人。

『當按鍵被按下』方式產生分身也會讓分身暴增

『當按鍵被按下』方式產生分身也會讓分身暴增

但是,學生永遠有問題。學生問:在遊戲過程中,我就是要用到『當按鍵被按下』,而且還要分辨「本尊」與「分身」,該怎麼做?

看看下面的例子:拿著香蕉的是本尊,按下按鍵會隨機移動的是分身。要如何讓本尊不跟著動呢?

拿著香蕉的是本尊,按下按鍵會隨機移動的是分身

拿著香蕉的是本尊,按下按鍵會隨機移動的是分身

雖然這問題不好(不符合本尊該隱藏的分身使用方式),但還是有解決方法,方法在使用一個區域變數『分身?』就行,將本尊的『分身?』變數設為 0;分身的『分身?』變數設為 1,就可以分辨了。

程式如下:

本尊的『分身?』變數是 0;分身的『分身?』變數是 1

本尊的『分身?』變數是 0;分身的『分身?』變數是 1

因為『分身?』是個區域變數,本尊與各個分身的變數值是"獨立"的,『當分身產生』時分身的『分身?』變數設為了 1,就可以區分本尊與分身了。

按鍵按下的程式:

這樣就能讓本尊不接受按鍵按下的事件了

這樣就能讓本尊不接受按鍵按下的事件了

但,這還不是所謂的"管理",至於要怎麼做到管理,請看下一篇。

很多 Scratcher 在變數後面加個 '?' 來分辨這是一個「布林 (Boolean)」類型的變數,此類型值不是真 (True) 就是假 (False)。英文變數名稱通常在前面加個 'is',例如 "isClone?"

分身管理 2 - Scratch老師就要會管

上一個單元介紹了給每個 Scratch 分身一個編號變可以對分身進行"管理",在前篇的解釋名詞「本尊」與分身後,傑夫老師就要來正式介紹分身怎麼"管理"。

通常 Scratch 遊戲中分身用作子彈或是隨機出現的敵人,用完之後立即『分身刪除』。但是,在複雜的遊戲中,會需要對每個分身各別操作,就必須對分身進行"管理",而管理就必須利用分身編號以及清單

如果要設計一個遊戲,要讓產生的每個分身有各別的造型,還要分別說出不同的一句話,這該怎麼做?看看下面的例子:

站在中間的是「本尊」,每個分身順時針出現在 5 個位置,每個分身都有一個『猴子分身ID』的編號,分身產生時換成不同的造型、說出自己的編號,當每個分身被點擊時,分身依照清單的內容說話。

每個分身有各別的造型,點擊後分別說出不同的話

每個分身有各別的造型,點擊後分別說出不同的話

站在中間的「本尊」在綠旗點擊後產生出 5 個分身,因為在角色屬性中設定了『迴轉方式設為不旋轉』,即便本尊每次『右轉 72 度』,但本尊與分身都保持著頭上腳下。同時,在『當綠旗被點擊』時建立好每個分身要說的話的清單『說話』。程式如下:

點擊綠旗建立分身並賦予編號,同時建立一個清單『說話』

點擊綠旗建立分身並賦予編號,同時建立一個清單『說話』

那麼,該怎麼利用編號『猴子分身ID』呢?程式就是下面這樣簡單:

猴子有不同的造型,利用清單就能說出各自的話

猴子有不同的造型,利用清單就能說出各自的話

當分身產生時先從本尊的中心位置移動 110 點,每個分身就會顯示在與本尊相同距離的位置。利用『猴子分身ID』就能讓每個分身有不同的造型。當『角色被點擊』時,由於是點擊在分身上,那麼那個分身就會說出清單『說話』裡的第『猴子分身ID』項的話。

搭配分身編號清單,可以讓分身做出各別的事情。也可以反過來,把分身的資料(例如位置座標)記錄到清單之中,就能輕易地對分身做"管理",請試著發揮創意好好地利用分身編號,提升你的程式功力與遊戲設計能力喔!

分身管理 2 - Scratch老師就要會管

前篇介紹了管理 Scratch 分身的基本方法,提到了可以把分身的位置座標記錄到清單之中,就能輕易地對分身做"管理" 。但至於怎麼應用,由於點擊數破百,那傑夫老師就來加碼放送。

大家都知道,動作積木中有一個『面朝OO向』,這裡的OO可以是一個角色,但大家也都知道面朝的只能是"本尊"的方向。那麼,如何面朝特定某一個"分身"呢?那就需要將分身位置座標儲存在清單之中,再加上一點點數學運算來達成。

數學不好的請先去複習反三角函數 - arctan反正切函數(或者寫成 tan⁻¹ )

先來看看專案結果:定位在 (0, 0) 舞台中間的箭頭輪流轉向各個猴子分身,並說出各分身的編號與座標。

箭頭輪流轉向各個猴子分身

箭頭輪流轉向各個猴子分身

猴子的程式跟前篇的相似,分身產生時給每個分身一個編號,並更換造型,只是多了兩個清單 ( 清單 X 與清單 Y ) 分別用來記錄各個分身的 x 座標與 y 座標。編號 1 號的 x 座標與 y 座標,就會被添加到清單的第 1 項;編號 2 號就會被添加到清單的第 2 項,以此類推。

猴子的程式

猴子的程式

每個分身的座標依序添加至清單中

每個分身的座標依序添加至清單中

重點在於中間箭頭的程式,首先要注意的是,Scratch 的角度是正上方為 0 度,所以數學公式會有點不同,是 arctan ( ∆x/∆y ),Scratch 的積木是『atan 數值 』。

先用 『atan 數值』積木求出角度

先用 『atan 數值』積木求出角度

再來, arctan 算出來的角度也是一個負值。但求出來的角度在 -90 到 +90 之間,但若分身在舞台下半部,也就是 y座標小於 0 的時候,arctan 求出來的值就差了 180 度,那以下的方法看了請不要驚訝~

atan 前面要加(+)上『 180*《Y的第(面向)項<Y座標》』

六角形的判斷積木被當作數字積木了

六角形的判斷積木被當作數字積木了

沒錯~六角形的判斷積木的可以當作圓形的數字積木做運算,如果判斷結果為「真」那麼值是 1;若為「否」值則為 0。

箭頭的完整程式

箭頭的完整程式

這樣,就可以讓箭頭指向各個分身了。數學是一切科學的基礎,一點都沒錯啊!好好的動動腦筋吧!Bye now~