VB遊戲寫作技巧﹝1﹞秀圖篇 來源:蕭堯中
  一開始,我想先從遊戲的圖形先講起好了,畢竟遊戲最重要的就是畫面,一個沒有
漂亮圖形的遊戲,我連碰都不想去碰。那該怎麼處理遊戲的圖形呢?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函數覆製過去就好了,不是很方便嗎?我都是這樣用的
說,如果你有更好的方法記得跟我講喔,下一次打算寫什麼呢?我也還沒有構想,網路
方面好像很多人都很有興趣,寫一篇網路的好了,大家覺得怎麼樣?

小恐龍工作坊 提供