子数涵数·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) ‘让角色停止行走是都处于站立状态
时间: 2024-12-21 10:00:53

子数涵数·VB——角色行走的相关文章

子数涵数&#183;VB——DLL动态链接库

一.定义 DLL是Dynamic Link Library的缩写,意为动态链接库.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中.当我们执行某一个程序时,相应的DLL文件就会被调用.一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件. 二.制作 1.打开vb,新建工程,选择新建中的ActiveXDLL. 2.再把工程名和模块名分别改成DLLproject和DL

子数涵数&#183;VB——变量

最近,VB吧频繁出现如下图所示的帖子(现在C吧.VB吧等都已经被二级考生玩坏了) 这主要用到的是变量的概念 首先,我们来看一下变量的数据类型 当然,就这题而言,数据类型不是重点,主要考察的是变量的作用域 Dim在模块顶部声明时,即在过程外声明时,为模块变量,而不是局部变量:此时它的作用域为模块级别,即在整个模块中皆可使用. Static与Dim的区别:用static声明的变量为静态变量,其存在时间较其作用域更久,即在程序运行时,用static声明的变量会一直存在,而用Dim声明的变量只在过程中存

子数涵数&#183;Flash——影片剪辑的控制命令1

一.什么是影片剪辑 影片剪辑是Flahs元件中的一种,另外的两种分别是图形和按钮. 制作一个影片剪辑,方法如下: 二.getProperty 中译:设置影片剪辑 用法:getProperty(实例名称,影片剪辑的属性) 当你要对一个影片剪辑进行AS的操作时,就需要用一个实例名,来指定你所需要操作的影片剪辑是哪一个. 我们可以选中影片剪辑,在它的属性面板中设置它的实例名. 影片剪辑的属性有以下几个: _alpha:透明度.  _currentframe:当前帧编号.  _height:影片高度. 

子数涵数&#183;PS——换脸

一.打开Photoshop,打开下载好的两张素材图(均在百度下载的). 二.选中人物脸的部分,不需要很精确(哪种抠图方式都行,我用的是矩形选框工具),再使用移动工具(快捷键为V,或者按着Ctrl),将其移至素材2. 三.修改刚刚移至过来的脸部图像,也就是图层1,修改它的不透明度,变成半透明效果(这是为了更好的对比,不一定要是50%). 四.编辑->自由变换,快捷键为Ctrl+T,缩放其大小,旋转其角度,使其与人物匹配,最后按下回车(enter)确定. 五.选中图层1,图层->图层蒙版->

子数涵数&#183;C语言——指针

一.什么是指针? 指针在百度的解释:是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值. 也就是说,指针是用于指向某一内存单元. 简而化之,指针便是地址. 二.声明指针 1.方法:数据类型 *名称 初始化 2.例如: int *p=&a //其中int是数据类型,p是指针变量的名称,=&a是对指针变量p的初始化 3.注意:指针声明完一定要初始化,否则就会变成野指针(没有指向的目标):而且指针初始化时只能指向地址,不能指向数据(在*与&

子数涵数&#183;C语言——循环语句

之前,我们讲过了编程中的三种结构(顺序.条件.循环),现在我们来看一下循环语句如何编写. 一.while循环语句(先判断后执行) 1 #include<stdio.h> 2 int main(void) 3 { 4 int sum=0,i=1; //定义变量sum的值为0,变量i的值为1 5 while(i<=100) //当i小于等于100时,进入循环 6 { //while(){}:括号内为条件表达式,花括号内为循环体 7 sum=sum+i; //用sum来做累加器 8 i++;

子数涵数&#183;Flash——遮罩动画

一.打开Flash,并新建一个flash文档 二.然后,用矩形工具,快捷键R,绘制一个背景图 三.新建一个图层 四.右击刚刚新建的“图层2”图层,选择“遮罩层” 五.在“图层2”图层上,用椭圆工具(O),绘制一个遮罩 六.在其后若干帧,插入一个关键帧,并将其中的遮罩图像移动位置 七.然后右击,给这些帧创建补间动画 八.在“图层1”图层,也就是被遮罩层,将其所缺的帧补齐 九.测试影片(Ctrl+Enter),效果如下 十.最后,让我们看一看下面的这张图的效果,是如何实现的呢?

子数涵数&#183;PS——文字人物

首先我们来看一下我用到的素材(在百度图库里下载的). 一.打开PS,在PS中打开素材. 二.复制一个图层(好习惯不解释). 三.图像->调整->阈值,或者按下图示按钮后选择阈值,弹出阈值窗口,调整阈值色阶. 四.按下Ctrl+Shift+Alt+E键,盖印可见图层. 五.选择->色彩范围,选择阴影,或者直接用吸管点击图像中暗部的部分,单击确定. 六.在形成选区后,图层->复制图层,快捷键为Ctrl+J,复制一个图层. 七.现在,可以将图层3之前的所有图层都隐藏掉(点击它们左边的小眼

子数涵数&#183;DW——图文混排页面

一.首先,打开Dreamweaver,新建一个的HTML项目. 二.在设计区里,写一些文字,随便写一点(也可以在代码区中的<body>和</body>之间写). 三.插入一张图片,插入->图像,快捷键为Ctrl+Alt+I,弹出窗口,随便选一张. 注意1:网页所支持的图片格式有gif.jpg.jpge.png. 注意2:由于我们没有建立站点,所有会提示"要使用此选项,请保存文件". 如果建立了站点且选择的图片不在站点的文件夹内就会提示"选择的文件