子数涵数·VB——角色行走

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子数涵数·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 / sTimer1.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 + kCall 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 ThenTimer1.Enabled = False之间,插入以下代码

Role.Picture = PictureClip1.GraphicCell(Rpic) 让角色停止行走是都处于站立状态

 


以上是关于子数涵数·VB——角色行走的主要内容,如果未能解决你的问题,请参考以下文章

子数涵数·VB——DLL动态链接库

子数涵数·Flash——影片剪辑的其他操作

子数涵数·DW——图文混排页面

子数涵数·C语言——hello world

子数涵数·PS——文字人物

子数涵数·C语言——让C帮你做计算