Recrit
【捨丸&KID】如何製作按鈕
在知道如何運用SP之後,接下來就得開始學習如何製作按鈕(button),基本上每一個SP圖片都可以製作成按鈕,不管是什麼樣的遊戲,按鈕都是不可或缺的。
*所謂的button是?
button為「在遊戲畫面中點擊滑鼠(mouseclick)時,來進行各式各樣命令的系統」。
當遊戲種類屬於novelgame時,如果沒有進行systemcustomize的話,這是很少用到的功能,但如果是製作adventure game或是simulation game,這就是一定會用到的功能了。
使用button的時候,對於功能性的理解非常重要,但是藉由button配置的latout和design讓玩家在進行遊戲時能夠更簡便的考量也很重要。
Point:button配置的基本
於畫面上表示的button可以粗略分為放在「不好點擊的地方」、「容易點擊的地方」,將畫面分成四個部份的話,玩家最容易點擊的地方是左下,而最不好點擊的地方則是右上。
較長被用到的button(save、load)可以從左下開始依序配置,而畫面的右方則是放入圖像或是維持空白會比較適合。
*button的系統構成
首先將畫面的一部分指定為button。
可以分為「直接輸入x,y座標值的命令」和「將SP畫像所表示的部份」指定為button領域的這兩類命令。
當滑鼠游標移至此領域之內時,可以變更表現圖像的顏色、改變形狀等,藉此來告訴玩家這裡有個button,這樣的作法稱為rollover。
如果於button定義領域內點擊滑鼠左鍵的話,Nscripter會依照所設定的button號碼輸入所指定的變數中,這個稱為回歸值(return value)。
利用變數中得到的回歸值來進行條件分歧,然後執行一開始就設定好的命令(常常會用goto命令來跳躍至特定label),這是基本的button的系統構成。
*Nscripter中的button種類
Nscripter中button大致可以分為三種:
*使用btn命令的button
將畫面中的一部分座標值設定為button的命令,能夠製作「當滑鼠游標移到上面就會變更圖像」這種只有簡單rollover動作的button,當有許多不同的項目出現,排列得像是清單型按鈕的button集合時較常以這命令來製作。
*利用spbtn命令的SPbutton
將SP作為button的命令。
不只是使用圖像來製作button,也可以文字化的SP來簡單地設置button。
*使用exbtn命令的button
使用SP(請參考2-6)的功能擴張button。
能夠精細地讓圖像切換表示、非表示模式,並且也可以讓游標進入定義範圍時發出效果音。在使用button系列命令時必須先理解SP系列的命令。
除了btn命令之外的button系列都有使用到SP圖像,這在之後的教學會說明。
*使用btn命令的button
利用btn命令製作的button。其特徵是能夠簡易地準備rollover的圖像。
使用繪圖軟體來製作dot圖像也是可以,但是如果利用FireWorks(Macrmaedia公司製作)等homepage製作用的繪圖軟體,就能夠簡易地製作button圖像。
我們試著以這個圖像為基本,來製作rollover的圖像。
當要製作rollover圖像時,最簡單的是將原本的圖像利用繪圖軟體來對顏色的濃度進行增加或減少,然後以不同的名稱儲存,再將已經改變顏色的部分圖像作為rollover圖像叫出。
如果是將顏色調整變得稀薄的話,能夠做出游標進入定義領域時變得明亮的button。
如果是將顏色調整變得較濃的話,能夠做出游標進入定義領域時變得陰暗的button。
以button用的圖像來說,雖然有許多無謂的部份,而使得檔案大小會增加。但是只要改變原本圖像的色調就能夠準備好素材,所以並不會花太多功夫。
*btn命令群
button命令是由複數的命令組合而形成。
設定rollover用的圖像
程式碼
btndef 叫出圖像的文字列
範例
btndef “sys02.jpg”(這邊sys02.jpg是第二張字比較亮的圖)
(上面這張是背景圖 下面這張是btn讀入的圖)
將rollover用的圖像讀取到記憶體之中,當滑鼠移到定義好的按鈕範圍時,在那個範圍內預先讀好的第二張圖片就會顯示出來(只有定義好的範圍會改變),因此看起來就像游標指到選像按鈕之後,字就變亮了。
為BuTtonDEFault的縮寫。
輸入這個命令之後,在這之前的所有button定義會全部被消去。
Point:透明button
如果在btn命令裡將btndef所設定的圖像和背景圖相同時,則button領域就會變成了像是個透明的東西。
雖然還是會進行rollover處理,但是由於圖像相同所以即使更新了畫面之後也不會產生會被發覺的變化。
利用這一點的話可以設計出讓玩家在畫面上點擊尋找線索的探索地圖。
設定button領域的座標
程式碼
btnbutton號碼,button領域起點x座標,button領域起點y座標,button領域寬,button領域高,rollover置換領域起點x座標, rollover置換領域起點y座標
範例
btn1,217,362,211,50,217,362
定義button的命令。
由此設定button號碼以及button領域的x,y座標值。
btn1,217,362,211,50,217,362
button的定義命令。
為BuTton的縮寫。
btn 1,217,362,211,50,217,362
此為button號碼。
與此號碼相同的數值會作為回歸數值輸入所指定的變數中。
button號碼似乎沒有上限,實際實驗中即使將數字設定大於50000,也能夠運作。
btn1,217,362,211,50,217,362
設定button領域的左上角x,y座標值。
btn1,217,362,211,50,217,362
設定button領域的大小,兩數值分別為橫寬畫素、縱高畫素。
btn1,217,362,211,50,217,362
此兩個數值設定當執行rollover時,所置換的圖像會從bntdef所定義圖像的哪個位置開始的x,y座標。
由於圖像的置換是本命令的前提條件,因此rollover所置換的圖像大小數值會直接使用前面的211,50,也就是第4,5個參數。
當使用和原本的圖像只有顏色差異的圖像來進行rollover時,此兩個數值可以直接就使用button領域的x,y座標數值即可。
button處理命令
程式碼
btnwait2數字變數
範例
btnwait2%3
進行button處理的命令。為BuTtoNWAIT的縮寫。
直到有滑鼠的動作為止,Nscripter會暫時停住。當出現了滑鼠的動作時,會將其作為回歸值輸入btnwait後面的變數中。
在此命令之中,進行下面的操作時會作為特殊的回歸值輸入變數裡。
1.於沒有任何button存在的區域點擊時。
0會被當成回歸數值輸入變數之中。
2.點擊右鍵時
-1會被當成回歸數值輸入變數之中。
3.於button領域點擊時。
藉由btn命令所設定的button號碼會作為回歸數值輸入變數之中,例如btn1會傳回1,btn2會傳回2。
當按下button以外的部份時會重複進行這處理,因此也稱為「buttonloop」。
在button處理結束之後,請輸入btndefcleat的命令來將記憶體上所存在的rollover用圖像清除。
Point:為何是btnwait2?btnwait1呢?
雖然現在的版本也能夠使用btnwait,但是這是較為古老的命令。(不是btnwait1,而是btnwait。)
btnwait的設計是回歸值出現並且輸入變數之後,rollover用的圖像就會被從記憶體上清除掉。這是適合用於以前記憶體較小的老電腦使用,目前的狀況是推薦使用btnwait2。
button定義清除命令
程式碼
btndefclear
範例
btndefclear
將button定義清除的命令。
使用此命令之後,存在記憶體上的rollover用圖像也會一起被消除。
當想要從button區塊前進到其他label的時候,由於並不需要rollover圖像可以用此命令消去。
*利用spbtn命令的SP型button。
spbtn命令為將SP畫像製作成button的命令。
基本上和button命令的流程是一樣的,但是因應使用素材的不同有兩種類的方法。
分為利用不需要圖像素材的文字列SP的方法以及利用SP用圖像製作的兩種。
SPbutton的優點為:由於表示button的是SP,因此可以利用αchannel做出不定形狀的button和在使用出現effect、移動演出後也能夠作成button。
*spbtn命令群
由SP命令和複數命令一起組成。下面將逐次解說設定。
在button命令之後所輸入的部份和bit命令相同,只是關於button的設定不同。
spbtn命令中用到的button一定要使用分成左右兩個cell的圖像。cell1為左側的圖像,在普通表示時使用;cell2為右側的圖像,在rollover時使用。
spbtn命令中的button領域為所使用的SP之大小,當滑鼠游標進入button畫像的領域時,圖像表示會從cell1rollover切換到cell2。
(alphatag專用)
SP設定(文字列SP)
設定SP的表示。
不需要輸入print命令。
在開始執行button命令的時候就會被表示。
範例
lsp1,”:s/40,40,0;#FF0000#FF8888*遊戲開始”,82,135
lsp為命令本體。
1為SP號碼。
lsp1,”:s/40,40,0;#FF0000#FF8888*遊戲開始”,82,135
:s;為文字SPoption。
lsp1,”:s/40,40,0;#FF0000#FF8888*遊戲開始”,82,135
三個參數分別為:文字寬度、文字高度、文字間間隔(單位為畫素)。
lsp1,”:s/40,40,0;#FF0000#FF8888*遊戲開始”,82,135
製作文字SP時會連續輸入兩個RGBcode,因為此文字SP由兩個cell所組成。
第一個RGBcode設定普通狀況時文字的顏色,第二個RGBcode設定rollover時文字的顏色。
lsp1,”:s/40,40,0;#FF0000#FF8888*遊戲開始”,82,135
為畫面上出現的文字列。
lsp1,”:s/40,40,0;#FF0000#FF8888*遊戲開始”,82,135
SP圖像左上角的x,y座標。
範例
*loop
lsp0, ”:s/40,40,0;#FF0000#FF8888*遊戲開始”,82,135
lsp1, ”:s/40,40,0;#FF0000#FF8888*讀取進度”,92,135
btndefclear
spbtn0,1;這一行表示將第0號sp定義為按鈕1
spbtn1,2
btnwait%0;會將數值傳回%0之中 搭配if式子就可以做分歧
if%0=0goto*loop
if%0=-1goto*loop
if%0=1goto*gamestart
if%0=2goto*loadgame
SP設定(圖像SP)
範例
lsp1,”:a/2,0,3;end.jpg”,217,312
lsp為命令本體。
1為SP號碼。
lsp1,”:a/2,0,3;end.jpg”,217,312
:c/為圖像SPoption。
lsp1,”:a/2,0,3;end.jpg”,217,312
三個參數分別代表:分割cell個數、cell切換的時間長度(單位ms)、動畫loop形式option。
2代表圖像分割為兩個cell。0表示切換時間長度為0ms。3表示此SP不進行動畫loop只呈現第一個cell。(關於此部份請參考p99。)
在使用圖像製作SPbutton時請準備由兩個cell構成的圖像。
製作方法舉例來說:首先以繪圖軟體製作原本的button圖像。然後在複製原本的圖像後變更色調或是亮度製作rollover用的圖像。
將這兩個圖像中,原本的圖像配置在左方,rollover用的圖像配置在右方組合成為一個檔案。左方即為cell1,又方為cell2。
當為了製作button叫出SP的時候,於圖像tag的設定上請注意需設定為只表示cell1。否則雖然仍然能夠進行rollover,但是SP的會不斷進行動畫迴圈造成困擾。
SPbutton化命令
將SP定義為button的命令。
程式碼
spbtnSP號碼,button號碼
範例
lsp1,”a/2,160,3;end.jpg”,217,312
btndefclear
spbtn1,1
btnwait%0
第一個數字為SP號碼,第二個數字為button號碼。button號碼並沒有上限。
*將button圖像中的透明部份從button領域中去除的命令 transbtn
此為用來將button圖像中的透明部份從button領域中去除的輔助命令
程式碼
transbtn
範例
lsp1,”a/2,160,3;end.jpg”,217,312
btndefclear
spbtn1,1
transbtn
btnwait%0
Nscripter的button領域基本上是四方形,但是當是想將標籤製作成button、或是做出圓形的button時可以使用這個命令。
使用後只有畫像中被表示的部份會對游標產生反應。
【捨丸&KID】如何放置SP圖像(2)
* 製作文字列SP
* 文字列SP的獨立命令
文字列SP利用圖像tag也能夠製作,最近的版本也新增了獨立命令。
將文字列製作成圖像檔,表示在畫面上的命令。
橫跨複數行的文字SP也可以用此命令作成。
程式碼
strsp SP號碼,文字列,左上角x座標,左上角y座標,橫向文字數目,縱向文字數目,文字寬,文字高,字間橫向間隔,行間縱向間隔,粗字flag,陰影flag(,顏色指定)…
範例
strsp 1,”出現在那邊的是¥她重要的……”,150,320,23,3,24,25,0,1,0,1,#FF0000,#FFFFFF (注意這邊不要用enter斷行)
strsp為命令本體,為STRingSPrite的縮寫,各種參數的排列方式和setwindow命令相似。
150,320為SP的左上角座標(x,y)。
23為橫向的文字列文字數,當到達最後時會切換到下一行。
3為縱向的文字行數。
24為文字寬。
25為文字高。
0為文字和文字間的橫向間隔。
1為行間和行間的縱向間隔。
0為粗字指定flag。(ON=1,OFF=0)
1為陰影指定flag。(ON=1,OFF=0)
#FF0000為文字顏色。
#FFFFFF為cell2號的文字顏色。(所謂cell2目前就當作滑鼠移動到上面時會出現的顏色)
當想要進行改行的時候請輸入「¥」(和文章改頁的時候是同樣的記號,請注意)。
關於表示字型可以由後述的spfont命令進行更改。
可藉由重複輸入顏色指定來作成複數cell的文字SP。
* 變更文字SP的字型
變更文字列SP字型跟文字大小的命令。
程式碼
spfont “字型名稱”,文字寬,文字高,橫向文字間隔,縱向行間間隔,粗字flag,陰影flag
範例
spfont “MS gothic”,24,25,0,1,0,1
spfont為命令本體,為SPriteFONT的縮寫。
“MS gothic”為所指定的字型名稱。
24為文字寬。
25為文字高。
0為文字和文字間的橫向間隔。
1為行間和行間的縱向間隔。
0為粗字指定flag。(ON=1,OFF=0)
1為陰影指定flag。(ON=1,OFF=0)
利用strsp命令所製作的文字列SP和利用畫像tag所設定的文字列SP皆可以利用此命令來設定字型。
* 文字列SP的移動
將利用文字SP命令作成的SP實際在畫面上移動看看。
可以利用for~next來輸入移動座標數值。而SP移動命令msp、amsp的x,y座標可以以變數輸入來使得其中的數值不斷替換,每經過一次迴圈便會將畫面更新一次這樣一來就可以讓其流暢移動。
「
;mode800
*define
clickstr"!?。」",2
game
*start
bg "BG\093.JPG",1
strsp 1,”出現在那邊的是¥她重要……”,150,320,23,3,24,25,0,1,0,1,#FF0000,#FFFFFF
print 1
click
for %0=0 to 5
msp 1,50,25,255
print 1
wait 500
next
end
」
* 圖像SP的移動
讓圖像SP移動的系統和前述的文字列SP移動命令沒有太大的差別。
將變數輸入x,y座標數值中,使數值的變化重複表現的話便能表示出移動。
* 讓SP移動的可能性
利用for~next做出的SP移動不只是可以用在人物立圖、SP這種較小的圖像上。像是背景的切換上、或是讓比畫面大小還要大的背景圖移動時都可以使用。
能夠藉此做出許多有趣的演出效果。
* 改變人物立圖和SP重疊的關係。
有時後會想要在人物立圖後面表示SP。
像想做出在女主角的後方天空裡有著飛上天的煙火這畫面時,如果煙火的圖像出現在女主角的人物立圖之前那會很令人困擾。並且當設定了許多SP作為button時,可能會出現被人物立圖所蓋住無法表示這樣的情況。
人物立圖的預設階層為第25號。當SP的號碼被設定為0~25號的時候會被表示在人物立圖之前,而如果設定為26號以上的話會表示在人物立圖的後面。
當想要變更人物立圖的階層號碼時,必須在定義區塊使用humanz命令進行宣告。請注意此命令只能在定義區塊使用。
程式碼
humanz 階層的數值
範例
*define
humanz 50
game
*start
humanz為命令本體。
其意義為人物立圖(human)在Z軸(深度)的數值。
50為所指定階層的數值。
在此範例中會變更為:0~50號的SP會表示在人物立圖之前,而51號之後的SP會表示在人物立圖之後。
* 新的SP命令
在之後Nscripter中也追加了新的SP命令。
其特點是旋轉、放大縮小、左右上下翻轉、追加計算blend都變得可能使用。
並非在處理上相當獨特的demo命令,而是真的作為SP來處理所以在使用上變得較為簡便。
但是由於能夠做出更多的處理,所以副作用也使得必須設定的數值增加了。在只是想作為普通的SP處理的時候還是使用以前的命令較為簡單。
* 叫出功能擴張SP的命令
和普通的SP不同,圖像的起點位置並不是「左上角」而是「中心」。這麼是為了讓圖像能夠進行迴轉效果、擴大效果。
擴大率數值於整數方向為擴大縮小,輸入minus方向時則圖像會如鏡像班反轉。當輸入-100的時候為等比例反轉。
回轉角的單位為度能夠輸入0-360的數值。迴轉方向為逆時針旋轉。
程式碼
lsp2 SP號碼,呼叫圖像文字列,中心x座標,中心y座標,x軸擴大率,y軸擴大率,迴轉角度(,初期α值,如省略則為255)
範例
lsp2 0,”:c;test.bmp”,320,240,100,200,36
* 將功能擴張SP以非表示狀態叫出的命令
此命令為將功能擴張以非表示狀態叫出的命令。
程式碼
lsph2 SP號碼,呼叫圖像文字列,中心x座標,中心y座標,x軸擴大率,y軸擴大率,迴轉角度(,初期α值,如省略則為255)
範例
lsph2 0,”:c;test.bmp”,320,240,100,200,36
* 將功能擴張SP以表示狀態叫出的blend命令
此命令為將擴張命令以經過追加計算blend的表示狀態叫出的命令。
程式碼
lsp2add SP號碼,呼叫圖像文字列,中心x座標,中心y座標,x軸擴大率,y軸擴大率,迴轉角度(,初期α值,如省略則為255)
範例
lsp2add 0,”:c;test.bmp”,320,240,100,200,36
和普通的lsp2命令不同之處為圖像經過追加計算blend。
追加計算blend為在圖像的明亮度上經過重複計算的加算方法。簡單的說,就是圖像會變得更明亮。
利用這個功能就能夠表現出霓虹、光束兵器這樣的表現。
* 將功能擴張SP以非表示狀態叫出的blend命令
此命令為將擴張命令以經過追加計算blend的非表示狀態叫出的命令。
程式碼
lsph2add SP號碼,呼叫圖像文字列,中心x座標,中心y座標,x軸擴大率,y軸擴大率,迴轉角度(,初期α值,如省略則為255)
範例
lsph2add 0,”:c;test.bmp”,320,240,100,200,36
* 功能擴張SP消去命令
將功能擴張SP從記憶體上消去的命令。
程式碼
csp2 SP號碼
範例
csp2 2
* 功能擴張SP的移動命令
利用相對位置的移動命令
讓功能擴張SP的現在位置座標數值經過增加或是減少的移動命令。
程式碼
msp2 功能擴張SP號碼,中心x座標增減數值,中心y座標增減數值,x軸擴大率增減數值,y軸擴大率增減數值,迴轉角度增減數值(,α數值增減值)
範例
msp2 0,10,20,-10,10,5
msp2是命令本體。
0是功能擴張SP的號碼。
10是x軸座標的增減數值。當想要朝相反方向移動時請輸入-10這樣加上minus符號的數值。20是y軸座標的增減數值。當想要朝相反方向移動時請輸入-20這樣加上minus符號的數值。
-10是x軸方向擴大率的增減數值。10是y軸方向擴大率的增減數值。
當擴大率的數值經過減法變成負數的時候,圖像會像鏡像這樣反轉。
5為迴轉角度的增減數值。數值為正數時方向為反時針轉,當數值為負數的時候方向為順時針轉。
使用這個命令後必須使用print命令才能夠使它表現。
利用絕對位置的移動命令
將擴張功能SP從現在的座標位置移動到所指定絕對位置的命令。
程式碼
amsp2 功能擴張SP號碼,中心x座標絕對數值,中心y座標絕對數值,x軸擴大率絕對值,y軸擴大率絕對值,迴轉角度絕對值(,α數值絕對值)
範例
amsp2 0,300,150,-100,50,60
asmp2為命令本體。
0為SP號碼。
300為x軸座標的絕對值。
150為y軸座標的絕對值。
此命令所利用的是絕對座標,直接輸入x,y的座標值。SP會直接表示在這個座標上。
-100為x軸的擴大率絕對數值。50為y軸的擴大率絕對數值。當擴大率為minus數值的時候,圖像會在其軸線上進行鏡像反轉。60為旋轉角度的數值。依據所輸入的數值進行逆時針旋轉。
使用這個命令後必須使用print命令才能夠使它表現。
* 將功能擴張SP暫時消去或是表示的命令
此為能夠將功能擴張SP切換表示模式、非表示模式的命令。
程式碼
vsp2 功能擴張號碼,表示flag(0或1)
範例
vsp2 1,0
vsp2是命令本體。
1為SP號碼。
0為表示flag。當數值為0的時候為非表示模式,數值為1的時候為表示模式。
使用這個命令後必須使用print命令才能夠使它表現。
* 將功能擴張SP一起消去或是表示的命令
將功能擴張SP一起消去
將全部的功能擴張SP一起暫時消去。
將目前被表示,全部的功能擴張SP全部切換至非表示狀態。
程式碼
allsp2hide
範例
allsp2hide
將功能擴張SP一起表示
將被allsp2hide所隱藏起來的功能擴張SP表示出來。
並不會對被vsp2等命令個別消去的功能擴張SP做出反應。
當想要讓button console、SP的集合一起消去或是出現的時候可以用到的命令。
程式碼
allsp2resume
範例
allsp2resume