

Java技术
2005: 03 04 05 06 07 08
09 10 11 12
2006: 01 02
Asp.net
2005: 07 08 09 10 11 12
2006: 01 02

用VB6设计有趣的动画场景
经常看电视的朋友一定会注意到许多动画片的场面制作得非常精美,那么能不能用VB6设计类似的场面呢,答案是肯定的,下面的代码可以慢慢的画出随机形状、可以设定树枝密度的“树”,并且可以在这棵树上慢慢的“结”出指定数量的红色的“果子”——非常的有趣。
(一)编程原理
我们可以用适当宽度的line控件分别在窗体上画出“树干和树枝”,然后用shape控件画出圆圆的大小适当的“果子”,并放在“树枝”的末梢。这两个控件的颜色和大小都可以自由设置。在下面的代码中,也将展示VB6的“无中生有”动态创建控件数组的新技术。
(二)编程实践
启动VB6,建立一个标准exe工程,添加两个命令按钮COMMAND1(CAPTION=“画出一棵树”),COMMAND2(CAPTION=“显示果子”),一个标签控件(CAPTION=“树枝密度:”),和一个文本控件TEXT1(用来设置树枝数量),调整上述控件到适当位置,双击窗体,写入以下代码:
Option Explicit
Dim CreateLines As Integer
Dim Lines As Integer
Dim mLine() As Line ´树枝
Dim Fruit() As Shape ´果子
Dim CreateFruit As Integer
Dim Apple As Integer
Dim Evaluate As Boolean ´是否已经画出了数
Dim Clear As Integer
Dim Eraser As Integer
Dim ShoWApple As Boolean ´是否已经显示了果子
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ´定时器
Private Sub Command1_Click() ´画出树枝
If Evaluate=True Then ´如果已经画出了树枝
For Clear=2 To UBound(mLine)
Set mLine(Clear)=Nothing
Set Fruit(Clear)=Nothing
Next
Controls.Remove("MotherLine")
For Eraser=2 To UBound(mLine)
Controls.Remove("linea" & Eraser)
Controls.Remove("fruta" & Eraser)
Next
End If ´那么将它们清理
´否则直接按照TEXT1中设置的数量画出树枝
´树枝数量
Lines=Text1.Text
ReDim mLine(1 To Lines) ´定义树枝数组
Set mLine(1)=Controls.Add("vb.line","MotherLine")
´初始化树干
With mLine(1)
.X1=Form1.ScaleWidth/2
.X2=Form1.ScaleWidth/2 ´据窗体中间
.Y1=Form1.ScaleHeight
.Y2=Form1.ScaleHeight-1000 ´高度比窗体小1000单位
.Visible=True ´可见
.BorderWidth=8 ´树干宽度8
.BorderColor=vbBlack ´以黑色填充
End With
´开始画出树枝
For CreateLines=2 To Lines
Set mLine(CreateLines)=Controls.Add("Vb.line","Linea"&CreateLines)
If CreateLines Mod 2=0 Then
´向左上方画出随机的直线(树枝)
With mLine(CreateLines)
.X1=mLine(CreateLines/2).X2
.X2=(mLine(CreateLines/2).X2)-Int(Rnd*1000)
.Y1=mLine(CreateLines/2).Y2
.Y2=mLine(CreateLines/2).Y2)-Int(Rnd*1000)
.Visible=True
.BorderColor=vbGreen ´以绿色填充
.BorderWidth=3 ´宽度为3
End With
Else
With mLine(CreateLines)
´向右上方画出随机的直线
.X1=mLine((CreateLines-1)/2).X2
.X2=(mLine((CreateLines-1)/2).X2)+Int(Rnd*1000)
.Y1=mLine((CreateLines-1)/2).Y2
.Y2=(mLine((CreateLines-1)/2).Y2)-Int(Rnd*1000)
.Visible=True
End With
End If
DoEvents
Sleep(50) ´每隔0.05秒画出并且显示一个树干
Next
ReDim Fruit(2 To Lines)
´画出每个树枝结出的果子,但是并不马上显示,直到单击了“结出果子”按钮
For CreateFruit=2 To Lines
Set Fruit(CreateFruit)=Controls.Add("vb.shape","fruta"&CreateFruit)
With Fruit(CreateFruit)
.Width=200
.Height=200 ´结出果子的大小
.Left=mLine(CreateFruit).X2-100
.Top=mLine(CreateFruit).Y2-100 ´结果位置
.FillColor=RGB(255,0,0) ´以红色填充
.FillStyle=0 ´边框类型
.Shape=3 ´圆形的的果子
.ZOrder 0
End With
Next
Evaluate=True ´设置树枝已经画出标志
ShoWApple=False ´设置显示果子标志
Command2.Caption="显示果子" ´设置结果按钮标题
End Sub
Private Sub Command2_Click() ´结出果子按钮按下
On Error GoTo Erro
If ShoWApple=False Then
´如果果子没有显示,那么将它们全部显示出来
For Apple=LBound(Fruit) To UBound(Fruit)
Fruit(Apple).Visible=True
DoEvents
Sleep (50) ´每隔0.05秒显示一个果子
Next
ShoWApple=True ´重新设置显示果子标志
Command2.Caption="取消果子"
Else
´如果果子已经显示,那么将它们全部隐藏
For Apple=LBound(Fruit) To UBound(Fruit)
Fruit(Apple).Visible=False
Next
ShoWApple=False 重新设置显示果子标志
Command2.Caption="显示果子"
End If
Erro:
If Err.Number=9 Then
MsgBox "必须首先画出数,才能结出果子!"
End If
End Sub
Private Sub Form_Load()
Me.Caption=App.Title ´添加应用程序标题
Me.Left=(Screen.Width-Me.Width)/2
Me.Top=(Screen.Height-Me.Height)/2 ´窗体具中
Evaluate=False
ShoWApple=False
End Sub
Private Sub Text1_Validate(Cancel As Boolean)
‘验证树枝数量是否为0或者1
If Text1.Text="" Or Text1.Text=1 Then
Cancel=True
MsgBox "必须输入树枝的数量!而且要大于1",vbOKOnly,"Error"
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub ´代码结束
(三)运行调试
首先单击“画出一棵树”按钮,这时将会慢慢的在窗体中央生成一棵“树”,黑色的树干,绿色的树枝。点击“显示果子”按钮,就会在这棵树上生成250个红色的圆形“果子”。是不是非常有趣?!
本文示例的代码比较简单,编程爱好者完全可以将line替换成精美的图片(picture),至于“果子”的外形当然也可以随心所欲的设计。