用VB6設計有趣的動畫場景 (轉)

gugu99發表於2008-03-20
用VB6設計有趣的動畫場景 (轉)[@more@] 

用設計有趣的動畫場景


   經常看電視的朋友一定會注意到許多動畫片的場面製作得非常精美,那麼能不能用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 Shople 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),至於“果子”的外形當然也可以隨心所欲的設計。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1001222/,如需轉載,請註明出處,否則將追究法律責任。

相關文章