2011年9月30日星期五

KAG教學---副程式,Subroutine

(建議在閱讀本篇教學之前,請先閱讀KAG教學---跳躍吧,jump )

話說劇本裡有一部分內容經常重複,結果劇本充滿重複的東西,令劇本變長......>( ゚ω゚ s)

(k ゚∀゚)<那麼你可以嘗試用副程式來改善這情況。

(k ゚∀゚)<Subroutine可以翻譯成副程式、次常式,當我們需要重複某一功能或某一段部分的內容,或者是一些不一定被執行的內容的話,我們可以把它寫成副程式,當我們需要使用時,就可以把它呼叫出來。

(k ゚∀゚)<在KAG裡,由於本身架構不是太嚴謹,所謂呼叫副程式其實只是跳到標籤(label),不過跟[jump]有點不一樣。

(k ゚∀゚)<我們可用[call]呼叫副程式,並且用屬性target設定指定的標籤,以下是範例。

呼叫副程式前[p][cm]
[call target=*subroutine]
呼叫副程式後
[s]
*subroutine
[position page=fore layer=message0 left=0 top=320 height=160 width=640]
[image storage="bg1" page=fore layer=base]
[return]

這個[s]是什麼來的?>( ゚ω゚ s)

(k ゚∀゚)<[s]是停止繼續執行下去,若果不加上[s],吉里吉里繼續執行下面的內容。

(k ゚∀゚)<當劇本跑到[call]時,劇本會跳到指定的標籤(label),不過跟[jump]有點不一樣,劇本可以返回到原本的位置。

(k ゚∀゚)<當劇本跑到[return],劇本就會返回到原本[call]的位置,詳細流程可看以下的流程圖。










如果不寫[return]會怎麼辦?>( ゚ω゚ s)

(k ゚∀゚)<簡單來說,不寫[return]的後果只是不會返回到原本[call]的位置。

那麼若果我不寫[return]的話,豈不是可以把[call]當成[jump]來用嗎?>( ゚ω゚ s)

(k ゚∀゚)<千萬不要這樣做,雖然是可行,不過會令劇本整個架構變得混亂,。

(k ゚∀゚)<而標籤(label)和[return]之間的東西,我們稱之為副程式。

(k ゚∀゚)<我們也呼叫其他ks檔案的副程式,我們可以使用storage指定ks檔案,以下是範例。

frist.ks
呼叫副程式前[p][cm]
[call storage="ch1.ks" target=*subroutine]
呼叫副程式後
ch1.ks
*subroutine
[position page=fore layer=message0 left=0 top=320 height=160 width=640]
[image storage="bg1" page=fore layer=base]
[return]


(k ゚∀゚)<我們亦可以在副程式裡呼叫其他副程式,以下是範例。

呼叫副程式前[p][cm]
[call target=*subroutine]
呼叫副程式subroutine2後
[s]

*subroutine
[position page=fore layer=message0 left=0 top=320 height=160 width=640]
呼叫副程式subroutine後[p][cm]
[call target=*subroutine2]
[return]

*subroutine2
[image storage="bg1" page=fore layer=base]
[return]

(k ゚∀゚)<上述的範例裡,我們在副程式subroutine裡再呼叫副程式subroutine2,理論上副程式裡呼叫副程式沒有數量的限制,我們也可以再在裡面呼叫副程式。

(k ゚∀゚)<對了,還有一個跟[jump]一樣的屬性countpage,設定當[call]跳到某標籤時,此標籤是否設定成「已讀」,預設值是true,不過這屬性沒有什麼用途,如果有需要的話可以參考一下。

那麼[return]有沒有一些屬性可以設定?>( ゚ω゚ s)

(k ゚∀゚)<雖然[return]有target和storage等屬性,但是絕對不建議大家使用,否則就失去了[return]的意義。

(k ゚∀゚)<今次介紹到這裡,下次再見。

沒有留言:

發佈留言