聲明:參考了羅某某的RPG教程 PS:由於博客園不支持VB的代碼,所以可行的地方暫用VB.net代替。 一、設置透明色 1.在VB新建一個工程,在窗體Form1的屬性面板中設置其名稱為main,AutoRedraw(自動重畫)為true(真),scalemode(縮放模式)為3-pixel(像素). ...
聲明:參考了羅某某的RPG教程
PS:由於博客園不支持VB的代碼,所以可行的地方暫用VB.net代替。
一、設置透明色
1.在VB新建一個工程,在窗體Form1的屬性面板中設置其名稱為main,AutoRedraw(自動重畫)為true(真),scalemode(縮放模式)為3-pixel(像素).
2.使用PictureBox(圖片框)控制項,繪製一張圖片,在屬性中載入圖片(角色行走圖),修改名稱為Role,Visible(可視化) = False(假),AutoSize(自動大小) = True,AutoRedraw = True,BorderStyle(邊框類型) = 0-None(無)
3.添加一個模塊,名為Do_Draw,在模塊中輸入以下代碼。
'聲明一個公開的函數,運用API“GdiTransparentBlt”來指定一種顏色為透明色(我指定了白色) Public Declare Function GdiTransparentBlt Lib "gdi32" (ByVal hdc1 As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal W1 As Long, ByVal H1 As Long, ByVal Hdc2 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal W2 As Long, ByVal H2 As Long, ByVal Color As Long) As Long
4.在這個模塊中,繼續輸入代碼。
GdiTransparentBlt 目的位置.hDC, X, Y, W, H, 源.hDC, 0, 0, W, H, RGB(255, 255, 255),其中X和Y是圖片的位置,而W和H是圖片的大小。
'定義一個公開的過程,名為Draw public sub Draw() main.Cls '對main窗體進行清屏 '繪製角色,hDC是句柄,RGB(255,255,255)是白色 GdiTransparentBlt main.hDC, 0, 0, main.Role.Width, main.Role.Height, main.Role.hDC, 0, 0, main.Role.Width, main.Role.Height, RGB(255, 255, 255) End Sub
5.效果如下。
二、裁剪行走圖
1.右擊工具欄的空白部分,單擊部件,彈出部件視窗,選中Microsoft PictureClip Control,單擊確定。
2.完成後,在工具欄就會出現一個新的工具,如圖示:
3.使用裁剪控制項(就是那個新工具),隨意繪製在窗體中,在其屬性中載入圖片(角色行走圖),再設置Clos(列)和Rows(行)都為4(因為我的行走圖是4x4的)
4.在main窗體模塊中,輸入以下代碼。
'定義私有的子過程,意譯為當滑鼠點擊窗體空白處時,觸發事件 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'pictureclip1.graphiccell(下標) 來引用每一幅經過裁剪得到的圖片,其中graphiccell存放各個裁剪圖的數組,而下標是從0開始的 Role.Picture = PictureClip1.GraphicCell(0) '調用子過程Draw Call Draw End Sub
5.效果如下。
三、滑鼠控制角色移動
1.在Do_Draw模塊中,將之前定義好的子過程進行修改,修改Public Sub Draw()為Public Sub Draw(X As Single, Y As Single),GdiTransparentBlt main.hDC, 0, 0……為GdiTransparentBlt main.hDC, X, Y……,具體如下。
'聲明一個公開的函數,運用API“GdiTransparentBlt”來指定一種顏色為透明色(我指定了白色) Public Declare Function GdiTransparentBlt Lib "gdi32" (ByVal hdc1 As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal W1 As Long, ByVal H1 As Long, ByVal Hdc2 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal W2 As Long, ByVal H2 As Long, ByVal Color As Long) As Long '定義一個公開的過程,名為Draw Public Sub Draw(X As Single, Y As Single) '定義X、Y兩個單精度型變數 main.Cls '對main窗體進行清屏 '繪製角色,hDC是句柄,RGB(255,255,255)是白色 GdiTransparentBlt main.hDC, X, Y, main.Role.Width, main.Role.Height, main.Role.hDC, 0, 0, main.Role.Width, main.Role.Height, RGB(255, 255, 255) End Sub
2.再把main窗體模塊中的Call Draw修改為Call Draw(X, Y),具體如下。
'定義私有的子過程,意譯為當滑鼠點擊窗體空白處時,觸發事件 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'pictureclip1.graphiccell(下標) 來引用每一幅經過裁剪得到的圖片,其中graphiccell存放各個裁剪圖的數組,而下標是從0開始的 Role.Picture = PictureClip1.GraphicCell(0) '調用子過程Draw Call Draw(X, Y) End Sub
3.效果如下(滑鼠點擊哪裡,角色就出現在哪裡)。