2011年11月12日星期六

KAG教學---如果,if條件判斷(1)

(k ゚∀゚)<今次介紹是其中一個重頭戲,就是用if來進行條件判斷,也是KAG裡變數的其中一個重要應用。

if?即是「如果」嗎?>( ゚ω゚ s)

(k ゚∀゚)<對呀,我們會使用[if]來判斷某些內容是否被執行,而我們會用條件式來判斷,如果條件式是成立,即是條件式為true,這麼[if]的內容就會被執行。

唔......好像很複雜......>( ゚ω゚ s)

(k ゚∀゚)<那麼看看以下的範例。

[eval exp="tf.flag=1"]
[if exp="tf.flag==1"]
tf.flag的數值是1。
[endif]

(k ゚∀゚)<在上述的範例裡,我們使用[if]的exp屬性來設定條件,exp屬性裡的數值為true時,[if]和[endif]之間的內容就會被執行。

不過這句"tf.flag==1"到底是什麼,為什麼有兩個等號那麼奇怪?>( ゚ω゚ s)

(k ゚∀゚)<這個是比較兩邊的數值是否相等,若果相等的話,其值便會是true,相反地若果不相等的話就會是false,因此這句"tf.flag==1"的意思是tf.flag裡的數值是否等於1。

(k ゚∀゚)<而我們一般稱這兩個等於符號(==)為比較運算子(或者是關係運算子),用來比較兩個數值,不過不要跟一個等號"="的指定運算子混淆,雖然若果寫上"tf.flag=1"並不會發生錯誤,但絕對不是預期的結果。

(k ゚∀゚)<除了這個之外,吉里吉里還有其他比較運算子,以下是一些例子。

運算子用途例子(a=1,b=1.2,c=1.0)
==等於a==c是true
!=不等於a!=b是true
>大於a>b是false
<小於a<b是true
>=大於或等於a>=b是false
<=小於或等於a<=b是true
===等於(包括資料型態)a===c是false
!==不等於(包括資料型態)a!==c是true

到底兩個等於(==)和三個等於(===)有什麼分別,大家都不是"等於"嗎?>( ゚ω゚ s)

(k ゚∀゚)<兩個等於(==)是比較兩者數值上是否相同,而三個等於(===)除了比較數值之外,還會比較兩者的資料型態,例如1和1.0雖然數值上一樣,不過一個是整數,另一個是實數,所以用三個等於(===)來比較的話,將會得到false (關於資料型態的詳細介紹可參考TJS教學---data type,資料型態)。

不過有時候我想考慮兩個以上的條件,例如若果變數a等於1和變數b等於1,分歧的內容就會被執行。應該怎麼才能這樣做?難道要用兩個[if]?>( ゚ω゚ s)

(k ゚∀゚)<不用這麼麻煩,解決這種邏輯的問題,我們可以用邏輯運算子,我們會用到&&(AND)、||(OR)、!(NOT)這三種來運算子,以下是一些例子。

運算子用途例子(a=1,b=1.2,c=1.0)
&&ANDa==b&&a==c是false
||ORa==b||a==c是true
!NOT!(a==b)是true

(k ゚∀゚)<&&代表AND,必須兩者都是true,才能得到true,如果任何一個是false,最後都會得到false。

(k ゚∀゚)<而||代表OR,只要任何一個的值是true,就會得到true,唯有兩者都是false,才能得到false。

(k ゚∀゚)<而!代表NOT,使用後的值變成相反的,true變成false,false變成true。

(k ゚∀゚)<[if]是十分有用的東西,如果在劇本裡一般有在劇本的分歧,或者是選項顯示與否。

有沒有一些例子?>( ゚ω゚ s)

(k ゚∀゚)<例如在決定進入哪個個別角色的路線時,我們可以用[if]來判斷,如果f.a、f.b、f.c是三個角色a、b、c的好感度,而我們把進入角色a的路線的條件設定為角色a的好感度是3或以下和角色b、c的好感度是3以下。我們可以用以下的方法解決。

[if exp="f.a>=3 && f.b<3 && f.c<3"]
[jump storage="a.ks"]
[endif]

(k ゚∀゚)<在以上的範例裡,當f.a的數值大於或等於3,並且f.b和f.c的數值小於或等於3,吉里吉里就執行這句[jump]而跳到a.ks。

(k ゚∀゚)<另一個例子是我們常說的flag,flag其實是遊戲劇本中控制事情發生的變數,如果當f.flag的數值是1,事情就會被觸發,我們可以這樣寫。

[if exp="f.flag==1"]
......事件被觸發
[endif]

(k ゚∀゚)<當然啦,[if]的應用還有很多,不過如果是AVG遊戲的話,以上兩個是最常見的吧。

(k ゚∀゚)<這次介紹差不多了,下次會介紹[else]和[elseif]來解決更多不同的情況。

沒有留言:

發佈留言