(k ゚∀゚)<今次講解一下一個AVG類遊戲常見的功能Auto跟Skip,雖然吉里吉里功能列上有Auto跟Skip,不過相信大家不太喜歡缺乏美觀的玩意。
嗯,平常見到的遊戲都是對話框旁邊附有Auto跟Skip的按鈕,的確不太想用功能列上的功能。>( ゚ω゚ s)
(k ゚∀゚)<所以今次就說一下如何使用Auto跟Skip的功能,雖然KAG沒有任何tag去直接使用Auto跟Skip的功能,不過可以利用MainWindow.tjs裡定義的函式去使用它們。
(k ゚∀゚)<我們先講Auto功能,Auto功能的函式主要有enterAutoMode()跟cancelAutoMode(),正如字面上的意義,它們是用來進入和離開Auto模式。
那該怎樣做才可以使用它們。>( ゚ω゚ s)
(k ゚∀゚)<先看看以下的範例。
按一下啟動Auto模式[l][r] [eval exp="kag.enterAutoMode()"] 第一行[l][r] 第二行[l][r] 第三行[l][r] 關閉Auto模式 [eval exp="kag.cancelAutoMode()"] [l][r] 第一行[l][r] 第二行[l][r] 第三行
(k ゚∀゚)<由於是用TJS寫的函式,KAG裡可以利用exp屬性來執行它們,執行enterAutoMode()時吉里吉里就會啟動Auto模式,當執行cancelAutoMode()時則離開Auto模式。
不過我有時候想播放OP或ED等影片,要強制離開Auto模式,但又不知玩家是否進行Auto模式,那麼這時執行cancelAutoMode()會不會有問題?>( ゚ω゚ s)
(k ゚∀゚)<不會啦,就算不是在Auto模式下執行cancelAutoMode()也沒有任何問題,不過若果大家想知道玩家是否進行了Auto模式,可以透過autoMode這變數來判斷,當autoMode的值為true時,代表正在進行Auto模式,看看以下的範例。
按一下啟動Auto模式[l][r] [eval exp="kag.enterAutoMode()"] autoMode的值為 [emb exp="kag.autoMode"] [l][r] 關閉Auto模式 [eval exp="kag.cancelAutoMode()"] [l][r] autoMode的值為 [emb exp="kag.autoMode"]
我有問題,若果我將autoMode設定為true,吉里吉里會不會啟動Auto模式?>( ゚ω゚ s)
(k ゚∀゚)<答案是會的,不過絕對不建議這樣做,因為enterAutoMode()跟cancelAutoMode()除了將autoMode的值改變之外,還進行其他東西,所以Auto功能請用enterAutoMode()跟cancelAutoMode()。
一說到Auto模式,有時候有些遊戲可以由玩家設定Auto模式的顯示速度,那如何在吉里吉里上設定它?>( ゚ω゚ s)
(k ゚∀゚)<在功能列上,吉里吉里提供了五種Auto模式的顯示速度給玩家選擇,它們可以透過Config.tjs裡autoModeLineWaits跟autoModePageWaits來設定換行跟換頁所等待時間,其單位為毫秒。
但我可不想玩家用功能列來設定,我想自行製作一個設定介面給玩家,有沒有辦法做到?>( ゚ω゚ s)
(k ゚∀゚)<其實Auto模式的顯示速度可以直接透過autoModeLineWait跟autoModePageWait來設定,留意它們跟Config.tjs裡autoModeLineWaits跟autoModePageWaits不同的,autoModeLineWait跟autoModePageWait是直接修改換行跟換頁所等待時間,autoModeLineWaits跟autoModePageWaits則是設定功能列上所給予這五種顯示速度的值。
(k ゚∀゚)<看看以下的範例。
按一下啟動Auto模式[l][r] [eval exp="kag.enterAutoMode()"] [eval exp="kag.autoModeLineWait=200"] [eval exp="kag.autoModePageWait=500"] 現在換行所等待時間為0.2秒[r] 換行跟換頁所等待時間則為0.5秒[p][cm] 第一行[l][r] 第二行[l][r] 第三行[p][cm] [eval exp="kag.autoModeLineWait=1000"] [eval exp="kag.autoModePageWait=2500"] 現在換行所等待時間為1秒[r] 換行跟換頁所等待時間則為2.5秒[p][cm] 第一行[l][r] 第二行[l][r] 第三行[p][cm] 關閉Auto模式 [eval exp="kag.cancelAutoMode()"]
(k ゚∀゚)<在上述的範例裡,我們利用autoModeLineWait跟autoModePageWait來設定所等待時間,而其值將會儲存到datasc.ksd裡,以便開啟遊戲時進行初始化。
原來如此……>( ゚ω゚ s)
(k ゚∀゚)<我們再講Skip功能,KAG預設了五種模式,並利用skipMode這變數來決定現在是哪個模式,skipMode的值由0至4,分別代表不同模式。
(k ゚∀゚)<當skipMode為0,代表停止Skip模式,我們可以利用cancelSkip()來停止Skip模式,cancelSkip()會將skipMode重新設定為0。
(k ゚∀゚)<當skipMode為1,代表執行Skip模式,直到要遇到等待滑鼠點擊的位置,例如是[l]或[p]等,就會停止Skip模式,我們可以利用skipToClick()來進入這個Skip模式。
有什麼時候會使用到它?>( ゚ω゚ s)
(k ゚∀゚)<這個雖然我們甚少在製作Skip功能時使用,不過倒是經常看得到它的存在。
嗯?有嗎?我好像沒看過……>( ゚ω゚ s)
(k ゚∀゚)<在文字顯示途中如果我們按下滑鼠,文字就會立即全部顯示,這其實是使用了skipToClick()。
原來如此……>( ゚ω゚ s)
(k ゚∀゚)<當skipMode為2,代表執行Skip模式,直到要遇到等待換頁的位置,就會停止Skip模式,我們可以利用skipToPage()來進入這個Skip模式。不過實際上沒什麼機會使用到……
(k ゚∀゚)<當skipMode為3,代表執行Skip模式,直到要遇到未讀的部分或[s]等,才會停止Skip模式,我們可以利用skipToStop()來進入這個Skip模式,功能列上的「次の選択肢/未読まで進む」選項就會用這功能。
啊呀!這就是我想要的確東西!!>( ゚ω゚ s)
(k ゚∀゚)<嗯,這就是一般在遊戲裡看到的Skip功能,但所謂的未讀部分,其實是利用label標籤來判斷,當遇到從未通過label標籤,就會停止Skip模式。
(k ゚∀゚)<當skipMode為4,代表執行Skip模式,如果按住鍵盤上Skip相關的鍵,例如Enter或Space鍵,就會繼續Skip模式,我們可以利用skipToStop2()來進入這個Skip模式。
(k ゚∀゚)<同樣地,不太建議直接修改skipMode變數來設定Skip模式,盡可能用函式來設定Skip模式。
(k ゚∀゚)<以下是綜合上述內容的列表,大家可以參考一下。
skipMode的值 | 效果 | 離開條件 | 函式 |
0 | 停止Skip模式 | cancelSkip() | |
1 | 進入Skip模式 | 等待滑鼠點擊的位置,如[l]或[p]等 | skipToClick() |
2 | 進入Skip模式 | 等待換頁的位置,例如[p]等 | skipToPage() |
3 | 進入Skip模式 | 未讀的部分或[s]等 | skipToStop() |
4 | 進入Skip模式 | 不按住鍵盤上Skip相關的鍵 | skipToStop2() |
(k ゚∀゚)<以下是實際應用的範例。
按一下啟動Skip模式[l][r] [eval exp="kag.skipToStop()"] 第一行[l][r] 第二行[l][r] 第三行[l][r] 關閉Skip模式 [eval exp="kag.cancelSkip()"] [l][r] 第一行[l][r] 第二行[l][r] 第三行
(k ゚∀゚)<今次介紹到這裡,下次再見。
意外收穫GET!!
回覆刪除感謝更新~!(ノ≧∀≦)ノ
剛好解決了OPED的問題。
另,要讓玩家通了一條綫后才能skipOP/ED
就用:
[if exp="sf.Item<10"]
[eval exp="kag.cancelSkip()"]
[eval exp="kag.cancelAutoMode()"]
[else]
[eval exp="kag.skipToStop()"]
[endif]
是這樣嗎?
其實不用動用到那些函式,
刪除[wv]有一個屬性叫canskip,
可以設定[wv]可否被略過,
若果是true,當玩家點擊滑鼠時,不會等待影片播放完就結束。
您好,請問能演示一下
回覆刪除“在文字顯示途中如果我們按下滑鼠,文字就會立即全部顯示,這其實是使用了skipToClick()”
嗎?
還有,請問kirikiri能做到設間斷點並且逐條指令地調試嗎?