码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-10-19 03:01:25      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

一、鼠标控制角色行走(每一步固定距离)

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——角色行走

标签:

原文地址:http://www.cnblogs.com/zhangzihan/p/5973269.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!