- 鐵幣
- 5658 元
- 文章
- 1252 篇
- 聲望
- 2150 枚
- 上次登入
- 18-8-18
- 精華
- 14
- 註冊時間
- 05-3-11
- UID
- 133014
|
LEVEL 7 LSP的混沌宇宙(3) 用EXBTN升級你的系統畫面
相關指令:
exbtn
相關格式:
exbtn的參數格式
-----------------------------------------------------
嗯,這次大概就只能講exbtn指令了吧。
在遊戲中,涉及按鈕懸停效果的,除了上一講說過的使用lsp顯示圖片並用spbtn定義按鈕外,當鼠標移動到某按鈕上時,一般還有以下兩種效果。
1、播放音效
2、在某個位置顯示圖片,並當鼠標從按鈕上移開時圖片消失。
熟悉了按鈕的使用以後,以普通的懸停效果,加上以上兩種效果,就可以製作出相當複雜的系統了。當然,單純做個華麗點的標題畫面更沒有問題。
這種情況下不附上範例真是不行咧,所以大家就暫時參考《青空之想試玩II》的遊戲系統吧(順便打個廣告)。遊戲中的option系統和物品系統就大量應用了exbtn製作的效果。當然青空是不能給你拆的(=_=b),但是看完這講之後,你也可以試試製作類似的系統了。
首先是使用exbtn達成和spbtn一樣的懸停效果,這是為了可以在這個基礎上進行擴展。
- *define
- game
- *start
- lsp 11,":a/2,0,3;btn.jpg",305,252
- lsp 12,":a/2,0,3;btn.jpg",305,302
- lsp 13,":a/2,0,3;btn.jpg",305,352
- print 1
- btndef ""
- exbtn 11,1,"P11,1"
- exbtn 12,2,"P12,1"
- exbtn 13,3,"P13,1"
- btnwait %0
- if %0<=0 goto *start
- if %0==1 goto *newgame ;開始新遊戲
- if %0==2 goto *loadgame ;讀取進度
- if %0==3 goto *endgame ;結束遊戲
- *loadgame
- systemcall load ;呼叫NS的讀檔選單
- goto *start
- *endgame
- end
- *newgame
- csp -1
- print 1
- 開始遊戲\
- end
複製代碼
參考下上次的代碼,就可以看出,只是把
spbtn 11,1這樣的指令,改成了exbtn 11,1,"P11,1"而已。
前面的11,1依然代表一樣的意思,而後面的第三個參數,使用""括起來的部分,就是exbtn的追加效果參數。
P11,1代表,當鼠標移動到圖片lsp11上時,將顯示圖片lsp 11的第1格。
注意,由於我們之前的設定,lsp11的圖片是被分成了兩格,而格數是從零起算的,平時顯示的就是第0格,因此這裡第1格就是特殊效果了。(如果是文字的話,自然就代表選中的文字顏色了)
顯示多格的圖片時,需要指定圖片編號和格數,兩者之間用逗號隔開。但當圖片沒有分格,或是單色文字的時候,就只需要指定編號了。
那麼,再試試加上音效播放效果吧。
找一個wav文件(這裡起名叫xd.wav)放到文件夾裡,然後把
exbtn 11,1,"P11,1"
修改成
exbtn 11,1,"P11,1S1,(xd.wav)"
運行遊戲,是不是當鼠標移動上去的時候,可以聽到音效呢?
然後,加上其他圖片的顯示及消失效果。
範例:當鼠標移動到圖片lsp12 上時,將會在畫面的左邊顯示lsp文字「讀取遊戲」。
加上在lsp11按鈕添加音效的修改,代碼變成如下這樣:
- *define
- game
- *start
- lsp 11,":a/2,0,3;btn.jpg",305,252
- lsp 12,":a/2,0,3;btn.jpg",305,302
- lsp 13,":a/2,0,3;btn.jpg",305,352
- lsph 14,":s/25,25,0;#ffffff讀取遊戲 ",205,302
- print 1
- btndef ""
- exbtn 11,1,"P11,1S1,(xd.wav)"
- exbtn 12,2,"P12,1P14"
- exbtn 13,3,"P13,1"
- btnwait %0
- if %0<=0 goto *start
- if %0==1 goto *newgame ;開始新遊戲
- if %0==2 goto *loadgame ;讀取進度
- if %0==3 goto *endgame ;結束遊戲
- *loadgame
- systemcall load ;呼叫NS的讀檔選單
- goto *start
- *endgame
- end
- *newgame
- csp -1
- print 1
- 開始遊戲\
- end
複製代碼
注意,這裡增加了一個默認不顯示的精靈,lsp 14。
實際測試,效果是出現了,問題也來了。
雖然當移動上去時,文字顯示了,但是當鼠標從按鈕上移動開之後,文字還留在那……
那是因為,雖然設定了「鼠標在按鈕上時執行的效果」,卻沒有定義「鼠標不在任何按鈕上時的效果」。
Ns為此提供了exbtn_d這一指令,用來定義當鼠標不在任何按鈕上時,畫面的顯示。
由於我們需要的是鼠標移開之後14號精靈消失,因此改寫成這樣:
- *define
- game
- *start
- lsp 11,":a/2,0,3;btn.jpg",305,252
- lsp 12,":a/2,0,3;btn.jpg",305,302
- lsp 13,":a/2,0,3;btn.jpg",305,352
- lsph 14,":s/25,25,0;#ffffff讀取遊戲 ",205,302
- print 1
- btndef ""
- exbtn 11,1,"P11,1S1,(xd.wav)"
- exbtn 12,2,"P12,1P14"
- exbtn 13,3,"P13,1"
- exbtn_d "C14"
- btnwait %0
- if %0<=0 goto *start
- if %0==1 goto *newgame ;開始新遊戲
- if %0==2 goto *loadgame ;讀取進度
- if %0==3 goto *endgame ;結束遊戲
- *loadgame
- systemcall load ;呼叫NS的讀檔選單
- goto *start
- *endgame
- end
- *newgame
- csp -1
- print 1
- 開始遊戲\
- end
複製代碼
可以看出來,
exbtn_d "C14"是唯一增加的部分。
也就是說,字母P代表顯示,而C則代表消失,S則代表播放音效。
以上這三個參數是可以不斷疊加的,例如說,要為所有按鈕增加播放音效和文字註釋效果。可以寫成以下這樣:
- *define
- game
- *start
- lsp 11,":a/2,0,3;btn.jpg",305,252
- lsp 12,":a/2,0,3;btn.jpg",305,302
- lsp 13,":a/2,0,3;btn.jpg",305,352
- lsph 14,":s/25,25,0;#ffffff開始遊戲 ",205,252
- lsph 15,":s/25,25,0;#ffffff讀取遊戲 ",205,302
- lsph 16,":s/25,25,0;#ffffff離開遊戲 ",205,352
- print 1
- btndef ""
- exbtn 11,1,"P11,1P14S1,(xd.wav)"
- exbtn 12,2,"P12,1P15S1,(xd.wav)"
- exbtn 13,3,"P13,1P16S1,(xd.wav)"
- exbtn_d "C14C15C16"
- btnwait %0
- if %0<=0 goto *start
- if %0==1 goto *newgame ;開始新遊戲
- if %0==2 goto *loadgame ;讀取進度
- if %0==3 goto *endgame ;結束遊戲
- *loadgame
- systemcall load ;呼叫NS的讀檔選單
- goto *start
- *endgame
- end
- *newgame
- csp -1
- print 1
- 開始遊戲\
- end
複製代碼
注意這裡P/C/S之前反而不用逗號分隔。
嗯,有些BT人可能會想到,當遊戲的一個畫面裡涉及到數十張圖片的顯示和消除的時候,這麼寫一定很容易讓人想死……
幸好NS還提供了簡寫功能:
exbtn_d "C14-16"和exbtn_d "C14C15C16"是等效的。
另外,由於exbtn所帶的參數自然可以用文字變數代替,可以考慮先把這些P啊C啊S的全部加到一個變數(例如$name)裡,最後使用exbtn 11,1,$name就能搞定。
如果你擅長使用循環和條件的話,簡化過程就更容易了。(啥?循環和條件是啥?……這不是今天的內容!)
-----------------------------------------------------
本日小貼士:
那麼讓我們來YY吧。
Q:lsp的應用範圍?
A:標題,選項,系統設定,系統按鈕,右鍵菜單,存儲讀取,地圖,小遊戲……
顯示圖片、顯示按鈕、根據玩家選擇進行操作,這是所有遊戲系統的基礎~
與其詢問別人怎麼做,不如自己思考一下。
當然,如果是自製右鍵菜單、對話系統按鈕和存取,這還要配合NS提供的一些系統類指令進行,這不是今天的內容……(跑……)
Q:動畫按鈕怎麼做?按鈕都是靜態的吧?
A:用exbtn製作透明按鈕,當不在按鈕上時顯示普通的lsp動畫一張,在按鈕上時顯示選中的lsp動畫一張。^^
Q:我要怎麼移動、放大、縮小、旋轉圖片?
A:雖然實際效果不太理想,但Drawsp 系列指令可以製作簡單的動態效果,那啥,下,下,下一講……(已經不知道下幾講才能講完了OTL)
[ 本文最後由 dghylkop 於 07-12-20 05:43 PM 編輯 ] |
|