[MMF2]旗子Flag與迴圈Loop

  昨天心血來潮繼續熟悉MMF2的物件功能時,無意間找到可以利用網路傳送/回報數據的物件與使用方法(MooSock物件),閱讀並測試好久之後終於通了~以前只知道MMF有線上傳輸資料的功能,只是都沒實際操作過,結果這麼一試就開始想作新的遊戲啦= =a



  繼續介紹MMF2的使用方法,繼上次講完事件編輯順序的例子後,這次要來介紹非常重要的的flag(順便提alternative value/string)還有fast loop(MMF中所內建的迴圈)。



第壹佰篇文章歡呼分隔線第壹佰篇文章歡呼分隔線第壹佰篇文章歡呼分隔線







◎Alternative value/Alternative string



  簡單來說就是變數,而且是屬於某個物件下的變數。例如點選Active物件,在Properties視窗就會有修改Alt value/string的選項(Alt value在這邊修改只能為整數),一個Active物件最多只能有26個Alt value以及10個Alt string,因此在使用上要小心變數上限的問題~因為變數都是隸屬不同的物件,就算有很多同一種類的物件,也能分別存有不同的數值,而這也顯示了物件導向的特性。









  如上圖,Alternative value/string可以在事件編輯視窗改。其中Alternative value可以用"Set"將設定成所要的數字、"Add to"加數字(可包含小數點,MMF1則不行,要用Set累加),"Subtract from"減數字(可包含小數點),"Spread value"則是設定N個相同物件的某個Alt value分別為A,A+1,...,A+N-1(例如有五個相同物件,設定Spread value從11開始,則這些物件的Alt value就會分別為11,12,13,14,15),使用上可以給相同物件編上編號以作辨認。







◎Flag





  旗子,也就是開關。Flag不能在Properties視窗直接被修改,必須要到事件編輯視窗。一個Active物件有32個Flag,以數字代表,0~31,如果超過0~31的範圍,系統會自動作同餘(例如Flag 60跟Flag 28是相同的)。Flag可以用"Set On"設定為開,"Set Off"設定為關,"Toggle"切換開關(開變關、關變開)。






example:



  雖然Flag只有開跟關的功能,看似簡單卻很常用到(例如拿到道具前後的事件觸發、作兩種物件分類等等,就算有32個Flag小弟也有用完過)。玩味一下上面觸發談話的例子,Flag 0當主角站在NPC左邊時會開,Flag 1當主角站在NPC右邊時會開,按按鍵會使主角面向談話相對的位置,而Flag 10表示主角站立在NPC談話範圍內,故只要Flag 0/1其中一者為開,則Flag 10也會開啟。將Flag 0/1/10關閉擺在最開頭,在其後的事件成立時再重開Flag,可以減少敘述。







◎Fast Loop








  快速迴圈,顧名思義,如果要在同一幅(frame)中連續作多次相同的事件時,就得用到Fast Loop了,在事件編輯視窗中的Special Condition可以選取。Fast Loop可以用"Start loop"修改某個名稱的迴圈的執行次數,"Stop loop"使某個名稱的迴圈停止,"Set loop index"可以修改某個名稱的迴圈目前所迴的數目。在這裡也能把迴圈的名稱當成變數,迴圈開始從1,2,....到N時結束迴圈,因此可以在迴圈中大方的把迴圈數(LoopIndex)當數字來使用。






  要把某個事件判斷當成迴圈的目標,則要從Special Condition新加"On loop"並取個名稱,而且要將On loop判定放第一才有作用。在On loop之後的判定則是迴圈執行中的判定,也能把迴圈數(LoopIndex)用在判定中。需要注意的是,如果同個敘述(迴圈)重複跑超過數萬次以上,就會被判斷為無窮迴圈使程式直接關閉,所以要控制迴圈執行的次數。然後,不管迴圈判定事件放在哪裡,只要沒有"Start loop"執行迴圈就不會有動作,一旦開始迴圈,不管事件放在哪裡,有"On loop"開頭的都會由上到下執行一遍,不到迴圈自己結束或"Stop loop"就不會停止,過於龐大的迴圈甚至會導致程式執行過慢(每個frame都繞一次的話)。






example:



  一個簡單的例子,用雙迴圈將兩個2D Array中的所有數值都變成0/1。只有在Frame剛開始執行一次,寫入Array數值的動作會被執行MaxX*MaxY次,利用當下的兩個迴圈數(LoopIndex)作為2D Array的座標以寫入數值。

沒有留言:

張貼留言