(k ゚∀゚)<巨集(Macro)可以把多個tag標籤結合成一個,可以簡化了一些經常重複某一功能或某一段部分的內容。
那麼跟之前介紹的副程式(Subroutine)有什麼分別?這兩個看起來好像一樣。>( ゚ω゚ s)
(k ゚∀゚)<在吉里吉里裡,兩者的差別頗大,副程式(Subroutine)一般用在內容較長的情況,而巨集(Macro)經常是用於整合多個tag標籤,一般情況下,其行數也會相對地較少。
(k ゚∀゚)<除此之外, 吉里吉里的巨集可以用來定義新的tag標籤,所以我們可以透過巨集改善劇本的可讀性。
(k ゚∀゚)<當我們定義一個新的巨集時,可使用[macro]和[endmacro],並且把巨集的內容寫在[macro]和[endmacro]之間,以下是範例。
;巨集定義
顯示紅色的文字
[resetfont]
[macro name="newtag"]
[font color=0xFF0000]顯示紅色的文字
[resetfont]
[endmacro]
(k ゚∀゚)<我們可以使用name這屬性來設定巨集的名稱,而呼叫巨集時我們直接寫上巨集的名稱,以下是範例。
;巨集定義
[macro name="newtag"]
[font color=0xFF0000]
顯示紅色的文字
[resetfont]
[endmacro]
;呼叫巨集
[macro name="newtag"]
[font color=0xFF0000]
顯示紅色的文字
[resetfont]
[endmacro]
;呼叫巨集
[newtag]
原來那麼容易就可以製作自己的tag標籤,不過有辦法在新定義的tag標籤加入屬性嗎?>( ゚ω゚ s)
(k ゚∀゚)<當然可以,看看以下的範例。
;巨集定義
[macro name="newtag"]
[font color=%newcolor]
顯示紅色的文字
[resetfont]
[endmacro]
;呼叫巨集
[newtag newcolor=0x00FF00]
[macro name="newtag"]
[font color=%newcolor]
顯示紅色的文字
[resetfont]
[endmacro]
;呼叫巨集
[newtag newcolor=0x00FF00]
(k ゚∀゚)<在上述的範例裡,我們定義巨集時加入了一個newcolor的屬性,而當在巨集裡使用到這屬性內的數值時,我們可以在寫上"%屬性名稱",要留意屬性名稱必須是小寫,當我們使用這巨集時,必須一同寫上其屬性。
必須要寫上這個屬性嗎?吉里吉里不是有很多tag標籤的屬性,本身就有預設值嗎?>( ゚ω゚ s)
(k ゚∀゚)<我們的確可以直接給予預設值,看看以下的範例。
;巨集定義
[macro name="newtag"]
[font color=%newcolor|0xFF0000]
顯示紅色的文字
[resetfont]
[endmacro]
;呼叫巨集
[macro name="newtag"]
[font color=%newcolor|0xFF0000]
顯示紅色的文字
[resetfont]
[endmacro]
;呼叫巨集
[newtag newcolor=0x00FF00]
[r][newtag]
(k ゚∀゚)<在上述的範例裡,巨集裡屬性數值的旁邊加上了預設值,並且在兩者之間加上豎線(|)這個符號,當我們使用時忽略了這屬性,吉里吉里就會使用到預設值。
但是在上述的範例裡,若果我想將所有[font]的屬性加入到巨集,豈不是很複雜嗎?>( ゚ω゚ s)
(k ゚∀゚)<若果我們需要把另一個tag標籤的所有屬性加入到巨集,有一個十分簡單的方法,看看以下的範例。
;巨集定義
[macro name="newtag"]
[resetfont]
[endmacro]
;呼叫巨集
[newtag color=0xFF0000 size=40]
[macro name="newtag"]
[font *]
顯示紅色的文字[resetfont]
[endmacro]
;呼叫巨集
[newtag color=0xFF0000 size=40]
(k ゚∀゚)<只要在tag標籤上加上星號(*),吉里吉里就會把這tag標籤的所有屬性加入到巨集,減省不少編寫的工序。
(k ゚∀゚)<若果我們能夠有效地使用巨集,除了增加劇本可讀性,甚至可以把編劇和程式分離出來,程式員把複雜的程式寫在巨集裡,編劇只要知道巨集名稱和其屬性,簡單地寫上一句就可以使用,不用理解裡面的是如何運作,亦不論裡面的是KAG還是TJS,編劇也能簡單地使用。
(k ゚∀゚)<而所有自定的巨集建議寫在劇本的一開始,例如寫在first.ks裡。
(k ゚∀゚)<今次介紹到這裡,下次再見。
其實我想做個macro標題
回覆刪除[macro name=T]
[title name=XXX Y]
[endmacro]
不過XXX是固定標題,則Y是隨著劇情而換的標題
所以呢,我打了XXX的標題后,應該怎麽放Y的代碼?
這就要看您這個Y是如何決定的,
刪除例如,如果我想T有一個屬性name來輸入Y這個標題,
我可以這樣寫,
[macro name=T]
[title name=&("XXX-"+mp.name)]
[endmacro]
若果是利用label名稱來Y決定這個標題,
我可以這樣寫,
[macro name=T]
[title name=&("XXX-"+kag.pcflags.currentPageName)]
[endmacro]
所以這完全取決於您這個Y是如何決定的。
label的該如何使用呢?
刪除我的是這樣的,然後出錯誤了
(字符串常数/正则表达式/八进制值未完结时到达了脚本终端)
*www|Testing
[t]
難道不能直接放入T麽?
然後關於mp.name這該如何使用?
[T name=Y]麽?
label的用法沒有錯,好像以下的模樣,
刪除[macro name=T]
[title name=&("XXX-"+kag.pcflags.currentPageName)]
[endmacro]
*www|Testing
[T]
留意這種方法裡,XXX這字串不能有空格。
至於有屬性name的例子,用法並沒有錯。
成功了~~>w<
刪除不過沒的空格真傷心>_<
大大是否可以介紹空格的代碼呢?沒的話就不用緊了
不能有空格主要是&這玩意不能有空格,
刪除所以迴避方法十分簡單,
把連接的部分移到其他地方做就行了,
就好像以下的模樣。
[macro name=T]
[eval exp="tf.tilte='XXX '+kag.pcflags.currentPageName"]
[title name=&tf.tilte]
[endmacro]
*test|Testing
[T]
哦哦哦大大我已經不知道要該如何膜拜你了!什麽樣的代碼都會(跪了……
刪除謝謝大大~!!
@macro name=C
回覆刪除[cm]
[locate x=-100 y=-280]
[button graphic="choose" target=%ch enterse="se1" clickse="se2"]
[eval exp="drawButtonCaption(kag.fore.messages[0].links[0].object, '(填要顯示的字)', 24)"]
@endmacro
類似之前的問題,只是呢,如何把mp.name放進“(填要顯示的字)”?
直接把“(填要顯示的字)”取代為mp.name就可以,
刪除即是以下的模樣,
[eval exp="drawButtonCaption(kag.fore.messages[0].links[0].object, mp.name, 24)"]