Since Christmas is coming soon, I decided to share my snowing effect code I wrote last year. The original code was written in BlitzMax. This year I have already made new Christmas intro in Monkey X. You may want to take look at the snowing effect of the Christmas video of the last year.
Import mojo2 Function Main() New MyApp End Class snowFlake Field x:Float, y:Float Field dx:Float Field r:Int Field yspeed:Float Field flakeAngle:Float End Class Class MyApp Extends App Field gfxBG:Image Field canvas:Canvas Global flakeList := New List<snowFlake> Method OnCreate() SetDeviceWindow(640,480,0) canvas = New Canvas gfxBG = Image.Load("bg.jpg",.0,.0) For Local i = 0 To 149 Local flake:snowFlake = New snowFlake flake.x = Rnd(50,640-50) flake.r = Rnd(2,8) flake.y = -flake.r * 2 flake.yspeed = Rnd(0.7,3) flake.flakeAngle = Rnd(0,359) flakeList.AddLast(flake) Next SetUpdateRate(30) End Method OnUpdate() End Method OnRender() canvas.PushMatrix() canvas.Scale(DeviceWidth() / 640.0, DeviceHeight() / 480.0) canvas.SetAlpha 1 canvas.SetBlendMode(BlendMode.Opaque) canvas.DrawImage(gfxBG,0,0) For Local flake:snowFlake = Eachin flakeList flake.x = flake.x + flake.dx flake.y = flake.y + flake.yspeed canvas.DrawCircle flake.x, flake.y, flake.r flake.dx = Cos(flake.flakeAngle) * 4 * Rnd(0.2,1) If flake.y >= 480 + flake.r * 2 Then flake.r = Rnd(2,8) flake.y = -flake.r * 2 Endif flake.flakeAngle = flake.flakeAngle + 1 Next canvas.PopMatrix() canvas.Flush() End End Class
Examine the code and you’ll get the idea quickly. Implementation in other programming languages should be quit straight forward. Just use background picture of your own.
Feel free to use the code.
Screenshot of the program:
I will soon publish my new Merry Christmas 2017 and Happy New Year 2018 video. And… It’s also written in Monkey X.