一、滑鼠控制角色行走(每一步固定距離) 1.首先,要理解角色移動的原理。 2.現在來定義所需變數,在main窗體模塊中最頂端輸入以下代碼。 3.在main窗體中繪製一個timer時間控制項,將其Enabled(啟動)設為false,Interval(間隔)設為30(這個可以自定義,是用來調整角色移動速 ...
一、滑鼠控制角色行走(每一步固定距離)
1.首先,要理解角色移動的原理。
2.現在來定義所需變數,在main窗體模塊中最頂端輸入以下代碼。
'角色坐標的定義 Dim Xn As Single, Yn As Single '角色下一步目標 Dim X0 As Single, Y0 As Single '角色起點坐標 Dim Xt As Single, Yt As Single '角色終點坐標 Dim n As Double '位移比例 Dim s As Double ' 總位移 Dim k As Double '每次增加的位移比例
3.在main窗體中繪製一個timer時間控制項,將其Enabled(啟動)設為false,Interval(間隔)設為30(這個可以自定義,是用來調整角色移動速度的)。
4.在main窗體模塊中Form_MouseDown下,刪去Call Draw(X, Y),加入以下代碼。
Timer1.Enabled = False '用於重新計算 '坐標、移動速度計算 Xt = X Yt = Y X0 = Xn Y0 = Yn n = 0 '對n進行初始化 s = Sqr((Xt - X0) ^ 2 + (Yt - Y0) ^ 2) '兩點間距離公式 k = 10 / s 'k越大速度越快 Timer1.Enabled = True
5.繼續在main窗體模塊中輸入代碼(關於timer的周期事件)。
'定義私有的子過程,意譯為每間隔一段時間,自動觸發事件 Private Sub Timer1_Timer() Xn = n * (Xt - X0) + X0 'Y軸移動 Yn = n * (Yt - Y0) + Y0 'X軸移動 n = n + k '當n=1時,角色移動完成 '調用子過程Draw Call Draw(Xn, Yn) End Sub
6.在main窗體模塊中的timer1_timer下,Call Draw(Xn, Yn)後插入代碼判斷停止,代碼如下。
'到達目的地 If Sqr((Xt - Xn) ^ 2 + (Yt - Yn) ^ 2) <= 5 Then '角色與滑鼠點擊位置距離小於5像素 Timer1.Enabled = False End If
二、角色在移動中的不同朝向和角色初始化
1.運用線性規劃的方法,來判斷角色的朝向,如下圖。
2.在main窗體模塊中Form_MouseDown下,在k = 10 / s和Timer1.Enabled = True之間插入代碼,代碼如下。
(通過之前的線性規劃的方法,Y<X 且 Y<-X就等於 Yt-Y0<Xt-X0 且 Yt-Y0<-Xt-X0,就能判斷角色面向朝上)
'面向判斷 If Yt - Y0 >= Xt - X0 And Yt - Y0 >= -(Xt - X0) Then ' "下" Role.Picture = PictureClip1.GraphicCell(0) '數組中第0位為角色朝上 Else If Yt - Y0 <= Xt - X0 And Yt - Y0 <= -(Xt - X0) Then ' "上" Role.Picture = PictureClip1.GraphicCell(12) '數組中第12位為角色朝下 Else If Yt - Y0 >= Xt - X0 And Yt - Y0 <= -(Xt - X0) Then ' "左" Role.Picture = PictureClip1.GraphicCell(4) '數組中第4位為角色朝左 Else If Yt - Y0 <= Xt - X0 And Yt - Y0 >= -(Xt - X0) Then ' "右" Role.Picture = PictureClip1.GraphicCell(8) '數組中第8位為角色朝上 End If End If End If End If
3.在main窗體模塊中,輸入以下代碼,從而實現在程式開始時,就繪製角色。
'定義私有的子過程,意譯為當窗體加裝時,觸發事件 Private Sub Form_Load() Role.Picture = PictureClip1.GraphicCell(0) '角色面朝下 Call Draw(main.Width / 30, main.Height / 30) '繪製角色,使其出現在屏幕中央 Xn = main.Width / 30 Yn = main.Height / 30 '和上一句一起,使角色在屏幕開始移動 End Sub
4.在main窗體模塊中Timer1_Timer下,修改Call Draw(Xn , Yn)為Call Draw(Xn - 15, Yn - 35),使角色與滑鼠對齊。
'調用子過程Draw Call Draw(Xn - 15, Yn - 35) '角色的腿部相較於滑鼠對齊
三、行走動畫
1.在main窗體模塊中的頂部位置,輸入代碼如下。
Dim Rpic As Integer, Ri As Integer '用於行走動畫判斷
2.在main窗體模塊中Form_MouseDown下,每一句形如If Yt - Y0 >= Xt - X0 And Yt - Y0 >= -(Xt - X0) Then後插入一句Rpic = 0,具體如下。
'面向判斷 If Yt - Y0 >= Xt - X0 And Yt - Y0 >= -(Xt - X0) Then ' "下" Role.Picture = PictureClip1.GraphicCell(0) Rpic = 0 Else If Yt - Y0 <= Xt - X0 And Yt - Y0 <= -(Xt - X0) Then ' "上" Role.Picture = PictureClip1.GraphicCell(12) Rpic = 12 Else If Yt - Y0 >= Xt - X0 And Yt - Y0 <= -(Xt - X0) Then ' "左" Role.Picture = PictureClip1.GraphicCell(4) Rpic = 4 Else If Yt - Y0 <= Xt - X0 And Yt - Y0 >= -(Xt - X0) Then ' "右" Role.Picture = PictureClip1.GraphicCell(8) Rpic = 8 End If End If End If End If
3.在main窗體模塊中Timer1_Timer下,在n = n + k和Call Draw(Xn - 15, Yn - 35)之間,插入以下代碼。
'角色行走動畫
Role.Picture = PictureClip1.GraphicCell(Rpic + Int(Ri / 4)) '使其值為0、1、2、3,來達到圖片迴圈的效果 Ri = Ri + 1 If Ri = 16 Then Ri = 0 '控製圖片的速度,每走四步換一張圖
4.在main窗體模塊中Timer1_Timer下,在If Sqr((Xt - Xn) ^ 2 + (Yt - Yn) ^ 2) <= 5 Then和Timer1.Enabled = False之間,插入以下代碼
Role.Picture = PictureClip1.GraphicCell(Rpic) '讓角色停止行走是都處於站立狀態