用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),至于“果子”的外形当然也可以随心所欲的设计。(河南 新天)