快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰官网7598522_龟发之家论坛



Visual Basic动画编程技巧

在Visual Basic中使用Image和Timer控件能很方便地实现动画。本文将先容Visual Basic动画编程的基滥觞基本理和实现三种不合类型动画的编程技巧。

一、 基滥觞基本理

动画是一种运动的模拟,着实现措施是在屏幕上快速地显示一组相关的图象。是以实现动画的根基是图象的显示和使图象快速、准时地移动或变更。在Visual Basic中,用LoadPicture函数将BMP、ICO和WMF款式的图象文件装入内存,并将函数返回值付与Image工具的Picture属性,便能在Image工具中显示图象。使图象移动或变更的基础措施有三种,即:

1. 用Image工具的Move措施移动图象,其Left和Top属性唆使了Image工具确当前左上角位置;

2. 调用LoadPicture函数装载不合的图象,并赋给Image工具的Picture属性,将在工具中显示不合的图象,即实现图象变更;

3. 改动Image工具的Width和/或Height属性可以缩放图象。应用Timer控件可以实现准时节制。Timer工具的Interval属性设置了准光阴

隔,即调用Timer事故历程的光阴距离。在Timer事故历程中处置惩罚节制Image工具的移动或变更,便能实现动画。Timer工具的Interval值抉择了动画的变更或移动速率,其单位是毫秒(1/1000秒)。Timer工具的Enabled属性抉择了Timer事故是否有效。设置Enabled属性为True将启动Timer事故(如启动动画);为False则将使Timer事故无效(如竣事动画)。

二、 无位移动画

无位移动画是指动画工具不移动,但图象赓续变更,其典典范子是翻书。实现无位移动画的措施是,设置好Image工具和Timer工具后,在Timer事故历程中调用调用LoadPicture函数装载不合的图象,并付与Image工具的Picture属性,使工具中显示不合的图象,即实现图象变更。

下面是翻书动画的例子。法度榜样启动时,在窗体中显示一本翻开的书,用鼠标左键点击书,则将开始翻书;再用鼠标左键点击书,则书将竣事翻动。位图文件book1.bmp~ book4.bmp分手体现了翻书时,正在翻的册页的不合位置,它们寄放在当前工程所在的目录中。在需显示动画的窗体(Form1)中设置Image工具Image1和Timer工具Timer1,并按下表设置它们的属性,未列出的属性应用缺省值。

工具

属性

设置值

Image1

Picture

...(工程文件所处路径)Book1.bmp

Timer1

Enabled

Fals澳门新葡亰官网7598522e

Interval

150

法度榜样代码如下:

Option Explicit ‘变量必须先定义,才能应用

Dim ImageNo% ‘当前的位图编号

Dim IsPlaying As Boolean ‘动画是否启动

Private Sub Form_Load()

IsPlaying = False ‘开始时,动画未启动

Image1.ToolTipText = "开始" ‘鼠标移到书上时,将呈现“开始”提示

ImageNo% = 1澳门新葡亰官网7598522 ‘动画从book1.bmp开始

End Sub

Private Sub Image1_Click() ‘用鼠标左键点击了书

If IsPlaying Then ‘动画已启动,则竣事

IsPlaying = False

Timer1.Enabled = IsPlaying

Image1.ToolTipText = "开始"

Else ‘动画未启动,则启动

IsPlaying = True

Timer1.Enabled = IsPlaying

Image1.ToolTipText = "竣事"‘鼠标移到书上时,将呈现“竣事”提澳门新葡亰官网7598522示

End If

End Sub

Private Sub Timer1_Timer() ‘Timer事故

ImageNo% = ImageNo% + 1 ‘动画下一帧

If ImageNo% > 4 Then ‘假如动画已到着末一帧,则

ImageNo% = 1 ‘再从第一帧开始

End If

`在Image工具中显示动画确当前帧

Image1.Picture = LoadPicture(App.Path & "ook" & ImageNo% & ".bmp")

End Sub

代码中App.Path指定了当前利用法度榜样所在的路径。

三、 单帧位移动画

单帧位移动画,是指同一幅图象的位置赓续变更而形成的动画,其范例实例时云彩被风吹动。体例单帧位移动画的措施是在Timer事故历程中调用Image工具的Move措施来移动图象。下面是云彩移动的例子。法度榜样启动时,在窗体中显示一朵云,用鼠标左键点击云,则云彩将开始飞舞,如碰着窗体的界限,云彩将改变移动偏向;再用鼠标左键点击云,则云将竣事移动。位图文件cloud.bmp寄放在当前工程所在的目录中。

在需显示动画的窗体(Form1)中设置Image工具Image1和Timer工具Timer1,并按下表设置它们的属性,未列出的属性应用缺省值。

工具

属性

设置值

Image1

Picture

...(工程文件所处路径)Cloud.bmp

Timer1

Enabled

False

Interval

150

法度榜样代码如下:

Option Explicit ‘变量必须先定义,才能应用

Dim IsPlaying As Boolean ‘动画是否启动

Dim DetaX%, DetaY% ‘沿X、Y轴的移动位置增量

Private Sub Form_Load()

IsPlaying = False ‘开始时,动画未启动

Image1.ToolTipText = "开始" ‘鼠标移到书上时,将呈现“开始”提示

DetaX% = 100 ‘沿X轴的移动位置增量为100单位

DetaY% = 100 ‘沿Y轴的移动位置增量为100单位

End Sub

Private Sub Image1_Click() ‘用鼠标左键点击了书

If IsPlaying Then ‘动画已启动,则竣事

IsPlaying = False

Timer1.Enabled = IsPlaying

Image1.ToolTipText = "开始"

Else ‘动画未启动,则启动

IsPlaying = True

Timer1.Enabled = IsPlaying

Image1.ToolTipText = "竣事"

End If

End Sub

Private Sub Timer1_Timer() ‘Timer事故

‘移动Image工具

Image1.Move Image1.Left + DetaX%, Image1.Top + DetaY%

‘碰着界限,则校对位置,并反向

If Image1.Left + Image1.Width >= Form1.Width Then ‘碰着右界限

Image1.Move Form1.Width - Image1.Width, Image1.Top

DetaX% = -DetaX%

ElseIf Image1.Top + Image1.Height >= Form1.Height Then‘碰着上界限

Image1.Mov澳门新葡亰官网7598522e Image1.Left, Form1.Height - Image1.Height

DetaY% = -DetaY%

ElseIf Image1.Left4 Then ‘假如动画已到着末一帧,则

ImageNo% = 1 ‘澳门新葡亰官网7598522再从第一帧开始

End If

`在Image工具中显示动画确当前帧

Image1.Picture = LoadPicture(App.Path & "ird" & ImageNo% & ".bmp")

‘移动Image工具

Image1.Move Image1.Left + DetaX%, Image1.Top + DetaY%

‘碰着界限,则校对位置,并反向

If Image1.Left + Image1.Width >= Form1.Width Then ‘碰着右界限

Image1.Move Form1.Width - Image1.Width, Image1.Top

DetaX% = -DetaX%

ElseIf Image1.Top + Image1.Height >= Form1.Height Then ‘碰着上界限

Image1.Move Image1.Left, Form1.Height - Image1.Height

DetaY% = -DetaY%

ElseIf Image1.Left = Form1.Width Or _

Image1.Top + Image1.Height >= Form1.Height Or _

Image1.Left <= 0 Or Image1.Top <= 0 Then

DetaX% = -DetaX%

DetaY% = -DetaY%

End If

`缩到原大年夜,则膨胀

If Image1.Width <= Width0% Or Image1.Height <= Height0% Then

DetaX% = -DetaX%

DetaY% = -DetaY%

End If

End Sub

您可能还会对下面的文章感兴趣: