Recrit
同人遊戲相關專欄連載
【捨丸&KID】blt 指令介紹
* bit動畫
在novel game的戰鬥場景中應該有見過類似刀劍揮舞軌跡的動畫。
那其實是每格只有畫面數分之一大小的圖像並排在一起,將每格放大之後依序連續表示而使其變成動畫的處理。每一格其實只有實際圖像的數分之一。
* 進行bit處理時的流程
首先必須將動畫用的圖像利用btndef命令將之讀入至記憶體中。
然後將記憶體中的圖像切割成複數個之後在利用blt命令來連續表示。
btndef “9x.bmp”
blt 0,0,640,480,0,0,320,240
* 讀入動畫用圖像
首先利用btndef命令讀入圖像。
程式碼
btndef 叫出圖像的文字列
範例
btndef “9x.bmp”
這裡用到btn命令中也被使用到,讀取button原本圖像的btndef命令。將動畫用的圖像讀入到記憶體之中。(請參考2-7 button命令)
* 表示出圖像的一部分
利用bit命令將圖像的一部分擴大表示。
程式碼
blt 表示於畫面時左上角的x座標,表示於畫面時左上角的y座標,表示於畫面時的寬,表示於畫面時的高,元圖像上開始讀入的x座標, 元圖像上開始讀入的y座標,元圖像讀入時的寬度,元圖像讀入時的高度
範例
blt 0,0,640,480,0,0,320,240
接著使用blt命令來表示圖像。
和SP不一樣,blt命令自己就包括了設定和表示的功能。
blt 0,0,640,480,0,0,320,240
0,0為動畫表示時於畫面上左上角的x,y座標。
blt 0,0,640,480,0,0,320,240
640,480為動畫表示時於畫面上的寬與高。
blt 0,0,640,480,0,0,320,240
0,0為元圖像上開始讀入的x,y座標。
blt 0,0,640,480,0,0,320,240
320,240為元圖像上被讀入的寬與高。
雖然有些複雜,但是請用下面原則記住:前半的0,0,640,480為實際表示在畫面上時的相關數值,後半的0,0,320,240為讀入的原圖像的相關數值。
上述範例中元圖像的320x240畫素會被擴大成640x480表示。
會使用擴大表示的原因是因為當圖像會動的時候,即使畫質較低落也不會讓玩家太在意。
* 當要進行動畫表示時?
剛剛所用的blt命令只能夠將所讀取圖像中的一部分以一張圖像表示在畫面上,這樣並不能說是動畫,因此必須要將必要格數的圖像利用blt命令不斷地更新畫面。
* 在使用過blt命令後
由於blt命令是直接在畫面上進行繪圖,因此在結束之後圖像常常會出現一些錯亂的狀況。
因此利用ofscpy命令將輸入blt命令更新過後的畫面圖像送至off screen buffer,先將畫面安定之後在進行叫出背景圖的動作。
程式碼範例:
「
btndef clear
btndef "pic\final.jpg"
csp -1
bg black,1
for %1=0 to 150 step 5
blt 0,100,600,220,670+%1,540,600,220
strsp 51,"隨便要打什麼字",800-%1*2,400,10,2,23,23,0,0,1,0,#FFFFFF
print 1
wait 50
next
ofscpy
wait 200
csp -1
bg black,9
wait 400
strsph 52,"天線寶寶~",150,200,13,2,23,23,0,0,1,0,#FFFFFF
strsph 53,"天線寶寶~~",300,350,13,2,23,23,0,0,1,0,#FFFFFF
vsp 52,1
print 19
wait 400
vsp 53,1
print 19
wait 500
click
csp -1
bg black,9
mov %1,0
for %1=0 to 300 step 5
blt 170,0,250,450,450,500+%1,250,450
strsp 51,"海綿寶寶",600,600-%1,10,2,23,23,0,0,1,0,#FFFFFF
print 1
wait 50
next
ofscpy
wait 200
csp -1
bg black,9
strsph 52,"派大星",400,200,13,2,23,23,0,0,1,0,#FFFFFF
strsph 53,"章魚哥",450,350,13,2,23,23,0,0,1,0,#FFFFFF
vsp 52,1
print 19
wait 400
vsp 53,1
print 19
wait 500
click
csp -1
bg black,9
mov %1,0
for %1=0 to 300 step 5
blt 450,150,250,450,1050,1000-%1,250,450
strsp 51,"我是丁丁",80,0+%1,10,2,23,23,0,0,1,0,#FFFFFF
print 1
wait 50
next
ofscpy
wait 200
csp -1
bg black,9
strsph 52,"也可以丟點有氣氛的",80,200,13,2,23,23,0,0,1,0,#FFFFFF
strsph 53,"寫教學也算是一種複習",200,350,13,2,23,23,0,0,1,0,#FFFFFF
vsp 52,1
print 19
wait 400
vsp 53,1
print 19
wait 500
click
csp -1
bg black,9
strsph 52,"其實沒必要貼這麼多",304,200,13,2,23,23,0,0,1,0,#FFFFFF
strsph 53,"但我懶得修了~~",281,350,13,2,23,23,0,0,1,0,#FFFFFF
vsp 52,1
print 19
wait 400
vsp 53,1
print 19
」
在novel game的戰鬥場景中應該有見過類似刀劍揮舞軌跡的動畫。
那其實是每格只有畫面數分之一大小的圖像並排在一起,將每格放大之後依序連續表示而使其變成動畫的處理。每一格其實只有實際圖像的數分之一。
* 進行bit處理時的流程
首先必須將動畫用的圖像利用btndef命令將之讀入至記憶體中。
然後將記憶體中的圖像切割成複數個之後在利用blt命令來連續表示。
btndef “9x.bmp”
blt 0,0,640,480,0,0,320,240
* 讀入動畫用圖像
首先利用btndef命令讀入圖像。
程式碼
btndef 叫出圖像的文字列
範例
btndef “9x.bmp”
這裡用到btn命令中也被使用到,讀取button原本圖像的btndef命令。將動畫用的圖像讀入到記憶體之中。(請參考2-7 button命令)
* 表示出圖像的一部分
利用bit命令將圖像的一部分擴大表示。
程式碼
blt 表示於畫面時左上角的x座標,表示於畫面時左上角的y座標,表示於畫面時的寬,表示於畫面時的高,元圖像上開始讀入的x座標, 元圖像上開始讀入的y座標,元圖像讀入時的寬度,元圖像讀入時的高度
範例
blt 0,0,640,480,0,0,320,240
接著使用blt命令來表示圖像。
和SP不一樣,blt命令自己就包括了設定和表示的功能。
blt 0,0,640,480,0,0,320,240
0,0為動畫表示時於畫面上左上角的x,y座標。
blt 0,0,640,480,0,0,320,240
640,480為動畫表示時於畫面上的寬與高。
blt 0,0,640,480,0,0,320,240
0,0為元圖像上開始讀入的x,y座標。
blt 0,0,640,480,0,0,320,240
320,240為元圖像上被讀入的寬與高。
雖然有些複雜,但是請用下面原則記住:前半的0,0,640,480為實際表示在畫面上時的相關數值,後半的0,0,320,240為讀入的原圖像的相關數值。
上述範例中元圖像的320x240畫素會被擴大成640x480表示。
會使用擴大表示的原因是因為當圖像會動的時候,即使畫質較低落也不會讓玩家太在意。
* 當要進行動畫表示時?
剛剛所用的blt命令只能夠將所讀取圖像中的一部分以一張圖像表示在畫面上,這樣並不能說是動畫,因此必須要將必要格數的圖像利用blt命令不斷地更新畫面。
* 在使用過blt命令後
由於blt命令是直接在畫面上進行繪圖,因此在結束之後圖像常常會出現一些錯亂的狀況。
因此利用ofscpy命令將輸入blt命令更新過後的畫面圖像送至off screen buffer,先將畫面安定之後在進行叫出背景圖的動作。
程式碼範例:
「
btndef clear
btndef "pic\final.jpg"
csp -1
bg black,1
for %1=0 to 150 step 5
blt 0,100,600,220,670+%1,540,600,220
strsp 51,"隨便要打什麼字",800-%1*2,400,10,2,23,23,0,0,1,0,#FFFFFF
print 1
wait 50
next
ofscpy
wait 200
csp -1
bg black,9
wait 400
strsph 52,"天線寶寶~",150,200,13,2,23,23,0,0,1,0,#FFFFFF
strsph 53,"天線寶寶~~",300,350,13,2,23,23,0,0,1,0,#FFFFFF
vsp 52,1
print 19
wait 400
vsp 53,1
print 19
wait 500
click
csp -1
bg black,9
mov %1,0
for %1=0 to 300 step 5
blt 170,0,250,450,450,500+%1,250,450
strsp 51,"海綿寶寶",600,600-%1,10,2,23,23,0,0,1,0,#FFFFFF
print 1
wait 50
next
ofscpy
wait 200
csp -1
bg black,9
strsph 52,"派大星",400,200,13,2,23,23,0,0,1,0,#FFFFFF
strsph 53,"章魚哥",450,350,13,2,23,23,0,0,1,0,#FFFFFF
vsp 52,1
print 19
wait 400
vsp 53,1
print 19
wait 500
click
csp -1
bg black,9
mov %1,0
for %1=0 to 300 step 5
blt 450,150,250,450,1050,1000-%1,250,450
strsp 51,"我是丁丁",80,0+%1,10,2,23,23,0,0,1,0,#FFFFFF
print 1
wait 50
next
ofscpy
wait 200
csp -1
bg black,9
strsph 52,"也可以丟點有氣氛的",80,200,13,2,23,23,0,0,1,0,#FFFFFF
strsph 53,"寫教學也算是一種複習",200,350,13,2,23,23,0,0,1,0,#FFFFFF
vsp 52,1
print 19
wait 400
vsp 53,1
print 19
wait 500
click
csp -1
bg black,9
strsph 52,"其實沒必要貼這麼多",304,200,13,2,23,23,0,0,1,0,#FFFFFF
strsph 53,"但我懶得修了~~",281,350,13,2,23,23,0,0,1,0,#FFFFFF
vsp 52,1
print 19
wait 400
vsp 53,1
print 19
」
PR
【捨丸&KID】exbtn 擴張按鈕
這禮拜要來介紹exbtn這個指令的應用,exbtn為複合按鈕指令,關於如何製作按鈕請參考之前的教學,exbtn可以將多個SP圖像組合成一個按鈕群組,例如現在有SP1,SP2,SP3三個圖像,就可以利用”exbtn_d”” exbtn 1,1”” exbtn 2,2” exbtn 3,3” 製作出比較華麗的效果,祥細使用方式如下:
exbtn_d命令
「exbtn_d」設定當滑鼠游標沒有指在任何一個button定義領域時(也就是任何一個SP圖像範圍,總之就是滑鼠沒點到按鈕的情況)的畫面表示。藉由輸入的控制文字列來對所指定的SP進行控制。
程式碼
exbtn_d 控制文字列
範例
exbtn_d “P1P2P3C4C5C6P7,0”
exbtn_d為命令本體。
為EXtraBuTtoN_Default的縮寫。
當滑鼠游標沒有放在任何一個button上時,會如控制文字列(“P1P2P3C4C5C6P7,0”)所輸入來表示圖像。
複合button的控制文字列
複合button的控制文字列中使用到半形英數的「C」、「P」、「M」和SP號碼。
其各自的功能如下所列。
C數字(SP號碼)
所指定SP號碼的圖像狀態為不顯示。C為Clear的縮寫。
P數字(SP號碼)
所指定SP號碼的圖像為顯示。P為Print的縮寫。
P數字1(SP號碼),數字2(cell號碼)
所指定SP號碼的圖像為顯示。P為Print的縮寫。
P數字1(SP號碼),數字2(cell號碼)
顯示號碼為數字1的SP圖像的cell2。
像這張圖就有3個cell,注意號碼是從0開始,所以cell2是最後一個分格
S數字,(叫出音效檔案的名稱)
發出音效。數字為channel編號。
M數字1(SP號碼),數字2(顯示座標X) ,數字3(顯示座標Y)
這是用來表示SP動畫,表示方式在設定SP圖像時就已經設定好了
控制文字列的長度沒有限制。
(例文)
“P1P2P3C4C5C6P7,0S1(SE\Chaim.wav)”
SP1,2,3號為表示模式。SP4,5,6號為非表示模式。SP7號表示cell 0號。並且於channel 1播放Chiam.wav。
請注意英文字母和阿拉伯數字之間並沒有空白,雖然因此而很不好閱讀但是請有耐心地依序閱讀。
當想要指定所表示的cell時,並需像P7,0這樣輸入「,」。
在出現長串文字列的地方插入「,」的話,視覺上很容易就會把它當成文字上的區隔點因此會造成閱讀的困難。但是在閱讀控制文字列的時候請記得要把「P」、「C」、「S」當成間隔點來閱讀。
exbtn命令
利用「exbtn命令」所指定的button在滑鼠游標進入圖像範圍的時候,會依據控制文字列所指定SP控制狀態來執行,並且在點擊button時會取得button號碼作為回歸值。
程式碼
exbtn SP號碼,button號碼,控制文字列
範例
exbtn 1,1,”C1P2P3P4C5C6P7,1S1(SE\bell.wav)”
將SP 1號設定為button 1號。
當滑鼠游標進入button的領域時會如同控制文字列所設定來表示SP群組圖
SP 1號非表示、SP 2號表示、SP 3號表示、SP 4號表示、SP 5號非表示、SP 6號非表示、SP 7號表示cell 1號,並且於channel 1號播放放於SE資料夾中的bell.wav。
—控制文字列的內容意義如上。
能夠藉由控制文字列一次進行許多的指令。
Point:如果真的很難閱讀控制文字列的話
由於控制文字列的ON、OFF很難一眼就看出來,我們在作業中可以利用Excel做出表格來管理。
於Excel中的每個格子裡輸入P1或P7,0這樣指定一個SP的文字,然後於設定完成後在拷貝到txt檔裡。
雖然有點像是秘技,但是ex button在控制文字列裡即使只有輸入有變化的號碼也能夠正常動作。
exbtn_d “P1P2P3C4C5C6P7,0”
bexbtn 1,1,“C1P2P3P4C5C6P7,1S1(SE\bell.wav)”
button 1有產生變化的只有SP 1號、SP 4號、SP 7號以及音效
簡略輸入
exbtn 1,1,””C1P4P7,1S1(SE\bell.wav)
由於只輸入有產生變化的SP號碼,因此會比較好閱讀。
在button處理命令之後為btnwait2命令,而在這之後的流程和其他的button處理相同。利用button的回歸值代入變數之中後,以if命令來評估狀態進行條件分歧。
程式碼範例:
「
*still_afterbgm
bg black,1
lsp 51,":c;sys\logo\stillbox_1.jpg",0,370
;這邊預先載入要顯示的SP圖像
lsph 32,":a/2,0,3;sys\logo\Liao.bmp",10,20
lsph 33,":a/2,0,3;sys\logo\Sean3.jpg",10,20
lsph 31,":a/2,0,3;sys\logo\sutemaru.jpg",10,20
lsph 34,":a/2,0,3;sys\logo\kid.JPG",10,20
lsph 41,":a/2,0,3;sys\logo\sutemarutext.jpg",340,0
lsph 42,":a/2,0,3;sys\logo\liaotext.jpg",340,0
lsph 43,":a/2,0,3;sys\logo\seantext.jpg",340,0
lsph 44,":a/2,0,3;sys\logo\kidtext.jpg",340,0
lsph 21,":l/3,300,2;sys\vx_chara02_d\cat1.bmp",550,320 ;注意這是SP動畫
lsph 11,":l/2,0,3;sys\vx_chara02_d\cat3.bmp",550,320
lsph 22,":l/3,300,2;sys\vx_chara02_d\sailor1.bmp",450,320 ;注意這是SP動畫
lsph 12,":l/2,0,3;sys\vx_chara02_d\sailor3.bmp",450,320
lsph 23,":l/3,300,2;sys\vx_chara02_d\captain1.bmp",350,320 ;注意這是SP動畫
lsph 13,":l/2,0,3;sys\vx_chara02_d\captain3.bmp",350,320
lsph 24,":l/3,300,2;sys\vx_chara02_d\kid1.bmp",250,320 ;注意這是SP動畫
lsph 14,":l/2,0,3;sys\vx_chara02_d\kid3.bmp",250,320
;動畫是會一直顯示的,所以一開始不需要顯示時可以將動畫移至畫面範圍外
exbtn_d "P11P12P13P14P31,1P32,1P33,1P34,1P41,1P42,1P43,1P44,1M21,800,800M22,800,800M23,800,800M24,800,800"
;注意這邊都沒有斷行 移到SP11範圍後 將SP21動畫移置畫面內並顯示SP11圖像的cell1,可以用alpha模式制作為透明,看起來就會像消失一樣如後面例圖
exbtn 11,11,"P11,1P12P13P14P31P32,1P33,1P34,1P41P42,1P43,1P44,1M21,550,320M22,800,800M23,800,800M24,800,800"
exbtn 12,12,"P11P12,1P13P14P31,1P32P33,1P34,1P41,1P42P43,1P44,1M21,800,800M22,450,320M23,800,800M24,800,800"
exbtn 13,13,"P11P12P13,1P14P31,1P32,1P33P34,1P41,1P42,1P43P44,1M21,800,800M22,800,800M23,350,320M24,800,800"
exbtn 14,14,"P11P12P13P14,1P31,1P32,1P33,1P34P41,1P42,1P43,1P44M21,800,800M22,800,800M23,800,800M24,250,320"
btnwait2 %0
if %0=-1 btndef clear:csp -1:goto *still_exit
if %0=-10 btndef clear:csp -1:goto *still_exit
goto *still_afterbgm
」
例圖:
重大更新
New Entries
(02/16)
(12/03)
(10/30)
(10/03)
(09/19)
Categories
Search
推廣遊戲
─歡迎交換連結─
Banner放置處