我不敢苟同楼上的几位的说法。 难道用DX写这个效果就不用写算法了?且不说DX在使用的时候烦琐无比。更何况楼主问的是用VB作,你们却告诉他用DX做,根本没有什么帮助。楼主请试试看用无边框窗体做。在窗体上画出你要的效果。 速度并没有你想像中那么慢。给你一个最简单的例子,用来实现很简单的烟花: 新建一个工程,把窗体的Borderstyle属性设为0(无边框), 加一个TIMER控件,把Intervel属性设为50。 最后把下面这段代码贴进去运行一下看看效果。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 SubPrivate 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 SubPrivate 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 SubPrivate 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如果楼主在编译的时候改成 .scr后缀,则可以生成一个屏幕保护程序。 以上这段代码,只花了我20分钟来写和调试。 希望对楼主有帮助!
哪个用JS倒是非常容易做得出来ei... VB做下雪的效果倒是容易做,但是礼花偶是没做过....
to:WallesCai 礼花的算法很多,建议你看一下DX SDK中VB的这个礼花的代码。
in htm uses vbscript or jscript write . set htm to wallpaper
in htm uses vbscript or jscript write . set htm to wallpaper
http://community.csdn.net/Expert/topic/3656/3656690.xml?temp=.5913965
难道用DX写这个效果就不用写算法了?且不说DX在使用的时候烦琐无比。更何况楼主问的是用VB作,你们却告诉他用DX做,根本没有什么帮助。楼主请试试看用无边框窗体做。在窗体上画出你要的效果。
速度并没有你想像中那么慢。给你一个最简单的例子,用来实现很简单的烟花:
新建一个工程,把窗体的Borderstyle属性设为0(无边框),
加一个TIMER控件,把Intervel属性设为50。
最后把下面这段代码贴进去运行一下看看效果。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 SubPrivate 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 SubPrivate 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 SubPrivate 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如果楼主在编译的时候改成 .scr后缀,则可以生成一个屏幕保护程序。
以上这段代码,只花了我20分钟来写和调试。
希望对楼主有帮助!
VB做下雪的效果倒是容易做,但是礼花偶是没做过....
礼花的算法很多,建议你看一下DX SDK中VB的这个礼花的代码。