用VB6设计有趣的动画场景
发表于:2007-07-01来源:作者:点击数:
标签:
经常看电视的朋友一定会注意到许多动画片的场面制作得非常精美,那么能不能用 VB 6设计类似的场面呢,答案是肯定的,下面的代码可以慢慢的画出随机形状、可以设定树枝密度的“树”,并且可以在这棵树上慢慢的“结”出指定数量的红色的“果子”——非常的有趣
经常看电视的朋友一定会注意到许多动画片的场面制作得非常精美,那么能不能用
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),至于“果子”的外形当然也可以随心所欲的设计。
原文转自:http://www.ltesting.net