下面是看到的一个制作下雪效果的例子,但是没看懂,请各位讲解一下!
对于下雪的景象大家可能都不陌生,我们还是用VB来制作一个下雪的景象吧。其实制作这样一个下雪的景象并不复杂,它的原理是首先在底色为黑色的屏幕上随机画出许多白点(雪花),然后使这些雪花不断地向下移动(重画),反复循环,就成功地模拟了下雪的景象。下面是这个小程序,你可以修改其中的一些数据调整雪花的密度和雪花落下的快慢。Dim Snow(1000, 2), Amounty As Integer
  Private Sub Form_Load()
  Form1.Show
  DoEvents
  Randomize
  Amounty = 325
  For J = 1 To Amounty
  Snow(J, 0) = Int(Rnd * Form1.Width)
  Snow(J, 1) = Int(Rnd * Form1.Height)
  Snow(J, 2) = 10 + (Rnd * 20)
  Next J
  Do While Not (DoEvents = 0)
  For LS = 1 To 10
  For I = 1 To Amounty
  OldX = Snow(I, 0): OldY = Snow(I, 1) 
  Snow(I, 1) = Snow(I, 1) + Snow(I, 2)
  If Snow(I, 1) > Form1.Height Then
   Snow(I, 1) = 0: Snow(I, 2) = 5 + (Rnd * 30)
   Snow(I, 0) = Int(Rnd * Form1.Width)
   OldX = 0: OldY = 0
  End If
  Coloury = 8 * (Snow(I, 2) - 10): Coloury = 60 + Coloury
  PSet (OldX, OldY), QBColor(0)
  PSet (Snow(I, 0), Snow(I, 1)), RGB(Coloury, Coloury, Coloury)
  Next I
  Next LS
  Loop
  End
  End Sub

解决方案 »

  1.   

    Dim Snow(1000, 2), Amounty As Integer
    Private Sub Form_Load()
    Form1.Show
    DoEvents
    Randomize
    Amounty = 325  '在线雪花点数
    '---初始化
    For J = 1 To Amounty
       Snow(J, 0) = Int(Rnd * Form1.Width) '该点在屏幕的x值
       Snow(J, 1) = Int(Rnd * Form1.Height) '该点在屏幕的y值
       Snow(J, 2) = 10 + (Rnd * 20)       '该点的步进,可以认为速度为10-30 (速度随机)
    Next J
      
    Do While Not (DoEvents = 0)
       '该LS循环表示10帧(动画)
       For LS = 1 To 10
          '该I循环绘制下一帧图片
          For I = 1 To Amounty
             OldX = Snow(I, 0): OldY = Snow(I, 1) '上次绘制的点,本次需要清除的点
             Snow(I, 1) = Snow(I, 1) + Snow(I, 2) '这次需要绘制的点,向下移动了!
             If Snow(I, 1) > Form1.Height Then     '雪花下落到屏幕底的话
                Snow(I, 1) = 0: Snow(I, 2) = 5 + (Rnd * 30)'从头开始,速度为5-30,屏顶
                Snow(I, 0) = Int(Rnd * Form1.Width) '从头开始,选择过一横坐标
                OldX = 0: OldY = 0 
             End If
             Coloury = 8 * (Snow(I, 2) - 10): Coloury = 60 + Coloury '选择一种灰度,目的是制造出亮度不一致,是因为前面速度不一致,距离不一致
             PSet (OldX, OldY), QBColor(0) '清除上次绘制的点
             PSet (Snow(I, 0), Snow(I, 1)), RGB(Coloury, Coloury, Coloury) '这次绘制点
          Next I
          '一帧图象完毕
       Next LS
       '10帧组成的动画完毕
    Loop
    '继续绘制
    End
    End Sub