2011年12月8日星期四

KAG教學---請等待一下,時間控制(1)

(k ゚∀゚)<在一般AVG遊戲裡,我們通常都是透過滑鼠或鍵盤的輸入來決定遊戲進行,如果當我們按一下滑鼠左鍵,劇本就會跳到下一行,按一下選項就跳到指定的標籤,這全部是透過玩家的操作來決定。

的確如此。>( ゚ω゚ s)

(k ゚∀゚)<不過有時候我們不想單單依靠玩家來決定遊戲進行,並靠著其他因素來決定,例如隨機性或時間性,例子有養成遊戲常見的隨機事件,或者是AVG遊戲裡會用到時間來控制遊戲進行,從而做到一些演出效果。

(k ゚∀゚)<今次介紹如何用時間來控制遊戲進行,首先我們先說一下[wait]。

(k ゚∀゚)<[wait]是用來令劇本等待一段指定的時間,並且有兩種不同的模式來設定等待時間,不過先看看以下的範例。

今回是最終回......
[wait time=1500]
騙你的。

(k ゚∀゚)<在上述的範例裡,兩句句子之間加了[wait],並把time設定為1500,為微秒(ms)為單位,即是1.5秒,所以會等待1.5秒才執行下一句。

那麼以下這樣做對不對?>( ゚ω゚ s)

1.5秒後加入背景[r]
3秒後播放SE[r]
4.5秒搖晃畫面[r]
6秒後顯示"測試結束"[p][cm]
[wait time=1500]
[image storage="bg1" page=fore layer=base]
[wait time=1500]
[playse storage="se1"]
[wait time=1500]
[quake time=500 timemode=ms]
[wait time=1500]
測試結束

那樣的話,6秒後吉里吉里就會顯示"測試結束",對不對?>( ゚ω゚ s)

(k ゚∀゚)<理論上是正確,不過實際上是不對的。

為什麼說得那麼深奧,到底這是對還是不對。?>( ゚ω゚ s)

(k ゚∀゚)<這4個[wait]確實各自等待了1.5秒,但你忽略了其他部分所消耗的時間,就算是顯示文字這麼簡單的東西,實際上也會消耗一些時間去運算,所以當顯示"測試結束",並不是真的是6秒後,而會有些微的誤差。隨著兩者之間的內容越多,時間的誤差亦會增加。

不過我需要較準確的等待時間,若果我真的想在6秒後吉里吉里就會顯示"測試結束",該怎麼辦?>( ゚ω゚ s)

(k ゚∀゚)<之前我說過有兩種不同的模式來設定等待時間,分別是normal和until,我們可以用mode屬性來選擇用哪一個模式,預設是normal。

(k ゚∀゚)<而當mode屬性為until時,time屬性的時間便會代表對比時間的參考點(時間原點)經過的時間,這代表等待時間將會參考這時間原點,而時間原點可以用[resetwait]來設定,以下是範例。

1.5秒後加入背景[r]
3秒後播放SE[r]
4.5秒搖晃畫面[r]
6秒後顯示"測試結束"[p][cm]
[resetwait]
[wait time=1500 mode=until]
[image storage="bg1" page=fore layer=base]
[wait time=3000 mode=until]
[playse storage="se1"]
[wait time=4500 mode=until]
[quake time=500 timemode=ms]
[wait time=6000 mode=until]
測試結束

(k ゚∀゚)<當執行[wait]時,等待時間是比較於[resetwait]經過的時間,例如當time為6000時,等待時間便會是經過[resetwait]之後的6秒,這樣等待時間就不會受執行其他東西的影響。

(k ゚∀゚)<[wait]還有一個屬性canskip,可以設定[wait]可否因點擊滑鼠而略過,若果是true,當玩家點擊滑鼠時,[wait]會直接結束,不會等待[wait]結束。反之若果是false,玩家必須等待[wait]結束才繼續。

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

沒有留言:

發佈留言