一開始,我想先從遊戲的圖形先講起好了,畢竟遊戲最重要的就是畫面,一個沒有
漂亮圖形的遊戲,我連碰都不想去碰。那該怎麼處理遊戲的圖形呢?VB提供了一個非
常好用的控制項--PictureBox,有了這個控制項我們才能輕鬆的在程式中秀出圖形,現
在就來看看PictureBox有那些特性可以讓我們在遊戲中使用。
Picture 屬性:只要將這個屬性填入正常的圖形檔名,VB就會自動幫我們載入圖
形檔。
Visible 屬性:這個屬性可以讓圖形消失或讓圖形出現在畫面上。
用法:Form1.Picture1.Visible = False '消失
Form1.Picture1.Visible = True '出現
left 屬性:表示圖形的位置的X座標
top 屬性:表示圖形的位置的Y座標
用法:改變這兩個屬性就可以改變圖形的位置
ScaleMode 屬性:設定PictureBox所使用的座標單位,一般都設為"3-像素"
知道了PictureBox的特性後,要怎麼樣把它應用到遊戲中呢?舉個例子好了,我現
在要做一個打磚塊的遊戲,需要用到那些圖片呢?磚塊、球、擊球的板子,一共有三張
圖,所以我們就使用三個PictureBox,將圖片載入到PictureBox裡面,如下面所示:
Picture1 磚塊的圖片
Picture2 球的圖片
Picture3 板子的圖片
接著我就可以寫,當我按下方向鍵的右鍵時,Picture3的left屬性+1,按下左鍵則
-1,這樣一來不就可以控制板子的左右移動了嗎?球也是一樣,只要每隔一段時間更改
一次Picture2的left和top 屬性,就可以做出球移動的效果了。
或許有人會覺得奇怪,一張圖就要用到一個PictureBox,小遊戲的圖不多還沒關係
,如果是RPG的話不就要動用到幾千個甚至幾萬個PictureBox?豈不是麻煩死了?所
以如果圖片很多的時候,我通常都是把圖全部都放在同一個圖形檔裡面,這樣就只要用
到一個PictureBox了,要用圖片時從裡面把它抓出來就好了,不過要怎麼抓呢?我建議
使用函數BitBlt()來做圖形的搬移。
使用BitBlt函數前要先宣告:
Declare Sub BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long)
hDestDC 目的地的DC
x 目的地的座標x
y 目的地的座標y
nWidth 來源圖片的寬度
nHight 來源圖片的高度
hSrcDC 來源圖片的DC
xsrc 來源圖片的座標x
ysrc 來源圖片的座標y
dwrop 運算方法:&HCC0020 PUT
&H8800C6 AND
&HEE0086 OR
&H660046 XOR
現在有兩個PictureBox
Picture1 AutoRedRaw 屬性設為Ture
ScaleMode 屬性設為"3-像素"
Picture2 AutoRedRaw 屬性設為Ture
ScaleMode 屬性設為"3-像素"
若想將Picture2裡(10,10)-(100,100)區域內的圖形copy到Picture1的(0,0)
可以這樣寫:
BitBlt Picture1.hdc,0,0,90,90,Picture2.hdc,10,10,&HCC0020
若你的Picture1的AutoRedRaw屬性是Ture的話你就要再多寫一行指令
Picture.Refresh圖形才會顯示出來。
這樣子平常寫遊戲時就只要設兩個PictureBox,一個專門用來顯示,另一個則用來
放圖形資料,需要時再用BitBlt函數覆製過去就好了,不是很方便嗎?我都是這樣用的
說,如果你有更好的方法記得跟我講喔,下一次打算寫什麼呢?我也還沒有構想,網路
方面好像很多人都很有興趣,寫一篇網路的好了,大家覺得怎麼樣?