2012年6月15日星期五

KAG教學---陣列,變數(5)

(k ゚∀゚)<不知道大家有沒有想過,我們有時需要儲存大量的值,例如AVG遊戲利用變數來控制CG解禁與否。

嗯,這的確需要大量變數來儲存這些值>( ゚ω゚ s)

(k ゚∀゚)<不過這就有問題了,如果有一百個值豈不是需要一百個變數?還要為它們命名不同的名稱?

這還真是令人煩惱的問題……>( ゚ω゚ s)

(k ゚∀゚)<這情況有一個很好的解決方式,就是使用陣列(Array),陣列是一組變數,它們擁有相同的名稱,不過不同於變數,在KAG裡,我們必須告訴吉里吉里這變數是一個陣列,就像以下的範例。

[eval exp="tf.arr=[]"]

(k ゚∀゚)<又或者是以下的模樣。

[eval exp="tf.arr=new Array()"]

(k ゚∀゚)<上述兩種方式都是告訴吉里吉里這變數arr是一個陣列,現在我們可以利用這陣列來儲存大量的值。

這陣列可以放多少個值?>( ゚ω゚ s)

(k ゚∀゚)<無論多少個也可以,吉里吉里裡的陣列是不需要決定其長度的。

聽起來好像不錯,不過到底如何使用,既然它們的名稱都一樣,到底我要如何識別它們?>( ゚ω゚ s)

(k ゚∀゚)<陣列中的元素都有自己的索引(index),索引值由0開始,留意並不是由1開始,使用時就像以下的方式。

[eval exp="tf.arr=[]"]
[eval exp="tf.arr[0]=123"]
[eval exp="tf.arr[1]=1.1"]
[eval exp="tf.arr[2]='abc'"]
arr[[0]裡的值是
[emb exp="tf.arr[0]"]
[r]
arr[[1]裡的值是
[emb exp="tf.arr[1]"]
[r]
arr[[2]裡的值是
[emb exp="tf.arr[2]"]

(k ゚∀゚)<在上述的範例裡,arr這陣列有3個元素,分別被初始為123、1.1和"abc"。

(k ゚∀゚)<我們亦可在告訴吉里吉里這變數是一個陣列之餘,同時進行初始化,就像以下的範例。

[eval exp="tf.arr=[123,1.1,'abc']"]
arr[[0]裡的值是
[emb exp="tf.arr[0]"]
[r]
arr[[1]裡的值是
[emb exp="tf.arr[1]"]
[r]
arr[[2]裡的值是
[emb exp="tf.arr[2]"]

(k ゚∀゚)<在上述的範例裡,吉里吉里會建立陣列,並初始化為123、1.1和"abc"。

我還是不太懂如何使用,有沒有一些實際例子?>( ゚ω゚ s)

[eval exp="tf.flag=[false,false,false]"]
[image storage="bg1" layer=base]

*start
[nowait]
[cm]
[image storage="fg1" layer=0 visible="&tf.flag[0]" pos=l]
[image storage="fg1" layer=1 visible="&tf.flag[1]" pos=c]
[image storage="fg1" layer=2 visible="&tf.flag[2]" pos=r]
[link exp="tf.flag[0]=!tf.flag[0]" target=*start]開關1[endlink]
[r]
[link exp="tf.flag[1]=!tf.flag[1]" target=*start]開關2[endlink]
[r]
[link exp="tf.flag[2]=!tf.flag[2]" target=*start]開關3[endlink]
[endnowait]

(k ゚∀゚)<上述的範例是模擬一般AVG遊戲常見的flag,flag就好像開關一樣,控制開啟或關閉。不過說到底也只是一個變數,在上述的範例裡,我們建立一個叫flag的陣列,控制立繪顯示與否,當true時顯示立繪,當false時則不顯示立繪,在CG或BGM鑑賞模式介面製作時經常會應用到這方法。

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

4 則留言:

  1. pos 是什麽?0.0

    回覆刪除
    回覆
    1. [image]裡的pos屬性是設定圖片顯示的位置

      刪除
    2. 啊啊,left center right的?明白了OwO

      刪除
  2. 話説我想把三個陣列放在一起,如[emb exp="button.char[0+1+2]"](當然這不行
    有沒有那樣的方法?
    還是說只能慢慢分開他成[emb...[0]"]...[emb...[2]"]這樣?

    回覆刪除