下面是看到的一个制作下雪效果的例子,但是没看懂,请各位讲解一下!
对于下雪的景象大家可能都不陌生,我们还是用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
对于下雪的景象大家可能都不陌生,我们还是用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
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