首页 > 代码库 > 子数涵数·VB——角色行走
子数涵数·VB——角色行走
一、鼠标控制角色行走(每一步固定距离)
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) ‘让角色停止行走是都处于站立状态
子数涵数·VB——角色行走