同人小技巧‎ > ‎

詳解同人更新 - 執行事件

張貼者:2016年3月24日 凌晨12:16人FK   [ Ka Kit Lau 已於 2017年6月5日 清晨7:01 更新]
基本認識

此動作的主要功能就是加速運算和自訂函式


温馨提示

1.不要開著導演面版玩無限loop這招,運算會變慢,而且會很LAG
2.如果你同時開著導演面版又連續使用「執行事件」,恭喜你,你的flash當死了
3.所有動作未執行完,系統是不會觸發另一個事件


運作原理

當是在事件0001中執行0002的事件,
這動作就是把事件0002的動作都搬來0001來運行,甚至0002未開始檢查也沒問題,亦不會損0002的重覆次數,但0002不能是「已結束並不在檢查狀態」

即是怎樣呢?

同人程式碼以「事件」作單位,以某個次序排列一起,然後系統會逐一且盲目地檢查各個事件,通過的話則執行,否則檢查下一個事件。就是因為這個原因,越多事件,運算就越慢。而這動作則可以透過減少盲目檢查,加速運算。

{
設有事件A、B、C:
運作次序:A->B->C

不使用執行事件:盲目找出A然後執行->盲目找出B然後執行->盲目找出C然後執行
使用執行事件:盲目找出A然後執行->直接執行B->直接執行C
}


回到最上文的例子,再解釋一下各個選項:

選項1:不看檢查,直接執行事件0002的動作

選項2:被指定的事件 (事件0002) 的檢查、動作都無條件執行一次
(即是方便某FK玩null變數宣告法(X),見圖一)

選項3:要檢查都通過了才執行事件0002的動作
(迷聲:如果都通過了,不用通過這個動作也會自行觸發事件0002啦)


不過要注意一下每項檢查和動作執行的順序(見圖一)



進階槪念 - for迴圈


然後某FK做了一個測試,用這招來玩for-loop,效果非常好~

運算目標:a不斷遞增,直至a=10

結果0.1秒就運算完畢,舊招是要用上1秒才搞定

上圖:使用新招的for loop^
圖三:使用舊招的for loop

這還可以在事件運行中for 迴圈,見下圖

1.s被設為1
    2.執行0002
    3.a遞增1
    4.若a<10,重複2.
5.s被設為2

輸出:
>任務變數: s=>1
>任務變數: a=>1
>任務變數: a=>2
>任務變數: a=>3
>任務變數: a=>4
>任務變數: a=>5
>任務變數: a=>6
>任務變數: a=>7
>任務變數: a=>8
>任務變數: a=>9
>任務變數: a=>10
>任務變數: s=>2
[00:00:18] 事件觸發:0001


進階槪念 - 擺脫連續執行上限

某FK又做了一次調試,就是自己指定執行自己,即在事件0001執行事件0001的動作(圖四)
本來以為flash會crash,結果沒有...
這是應該小哈猜到有人會這樣玩,所以當累積指定次數後(不管是在哪個事件指定),都會跳過那個事件。


例如圖四的例子
運算目標:a不斷遞增,直至a=20000,然後說出a的值

結果(圖五):
系統把那個事件直接刪掉
裡面的動作碰也沒碰過


經過測試,執行事件動作只能連續使用1000次

如果要運算到a會大於1000,會讓事件進入「已結束並不在檢查狀態」,即使剩餘重覆999999次數也一樣,

例如事件0001進入了「已結束並不在檢查狀態」,剩餘重覆999999次數,
如果事件0002包含"執行事件動作-0001",事件0002會處於"即使檢查通過,0002也不被執行"的狀態,
即是事件0002會卡在"檢查通過"的檢查狀態



(圖一)





























(圖二)


(圖三)


(圖四)




(圖五)