Private Type FlashDot
X As Long
Y As Long
Vx As Long
Vy As Long
Ax As Long
Ay As Long
Color As Long
VisibleTime As Long
End Type
Const DotCount As Long = 300
Dim MaxY As Long
Dim I As Long
Dim AColor As Long
Dim Flash(DotCount) As FlashDot '定义300个粒子
Private Sub Form_Click()
End
End Sub
Private Sub Form_Load()
With Me
.WindowState = 2
MaxY = .ScaleHeight
.BackColor = 0
.ScaleMode = 3
End With
AColor = RGB(1, 1, 1)
For I = 0 To DotCount
InitFlash I
Next
End Sub
Private Sub Timer1_Timer()
For I = 0 To DotCount
With Flash(I)
Me.PSet (.X, .Y), 0 '擦除旧的点
.Vx = .Vx + .Ax '计算新的X方向速度
.Vy = .Vy + .Ay '计算新的Y方向速度
.X = .X + .Vx '计算新的X方向位置
.Y = .Y + .Vy '计算新的Y方向位置
.Color = .Color - AColor '颜色变暗
Me.PSet (.X, .Y), .Color '画新的点
If .Y > MaxY Then InitFlash I '如果落到地上,重新初试化点
End With
Next
End Sub
Private Sub InitFlash(ByVal DotIndex As Long)
With Flash(I)
.X = Me.ScaleWidth \ 2
.Y = MaxY + I - DotCount
.Vx = Rnd * 21 - 10
.Vy = -50 - Rnd * 50
.Ax = 0
.Ay = 3 + Rnd * 3
.Color = RGB(220 + Rnd * 36, 200 + Rnd * 56, 210 + Rnd * 46)
End With
End Sub