I added 20 snowflakes to mine, hence so many variables. I used a timer (Timer1) and a toggle with variable “snow” to turn it off and on. Tweak to your needs.
Find a snowflake image and upload as media to your app
Add to App.OnStart
Set(Snowflake01Y, -RandBetween(10, 50));
Set(Snowflake02Y, -RandBetween(10, 50));
Set(Snowflake03Y, -RandBetween(10, 50));
Set(Snowflake04Y, -RandBetween(10, 50));
Set(Snowflake05Y, -RandBetween(10, 50));
Set(Snowflake06Y, -RandBetween(10, 50));
Set(Snowflake07Y, -RandBetween(10, 50));
Set(Snowflake08Y, -RandBetween(10, 50));
Set(Snowflake09Y, -RandBetween(10, 50));
Set(Snowflake10Y, -RandBetween(10, 50));
Set(Snowflake11Y, -RandBetween(10, 50));
Set(Snowflake12Y, -RandBetween(10, 50));
Set(Snowflake13Y, -RandBetween(10, 50));
Set(Snowflake14Y, -RandBetween(10, 50));
Set(Snowflake15Y, -RandBetween(10, 50));
Set(Snowflake16Y, -RandBetween(10, 50));
Set(Snowflake17Y, -RandBetween(10, 50));
Set(Snowflake18Y, -RandBetween(10, 50));
Set(Snowflake19Y, -RandBetween(10, 50));
Set(Snowflake20Y, -RandBetween(10, 50));
Set(Snowflake01Speed, RandBetween(1, 5));
Set(Snowflake02Speed, RandBetween(1, 5));
Set(Snowflake03Speed, RandBetween(1, 5));
Set(Snowflake04Speed, RandBetween(1, 5));
Set(Snowflake05Speed, RandBetween(1, 5));
Set(Snowflake06Speed, RandBetween(1, 5));
Set(Snowflake07Speed, RandBetween(1, 5));
Set(Snowflake08Speed, RandBetween(1, 5));
Set(Snowflake09Speed, RandBetween(1, 5));
Set(Snowflake10Speed, RandBetween(1, 5));
Set(Snowflake11Speed, RandBetween(1, 5));
Set(Snowflake12Speed, RandBetween(1, 5));
Set(Snowflake13Speed, RandBetween(1, 5));
Set(Snowflake14Speed, RandBetween(1, 5));
Set(Snowflake15Speed, RandBetween(1, 5));
Set(Snowflake16Speed, RandBetween(1, 5));
Set(Snowflake17Speed, RandBetween(1, 5));
Set(Snowflake18Speed, RandBetween(1, 5));
Set(Snowflake19Speed, RandBetween(1, 5));
Set(Snowflake20Speed, RandBetween(1, 5));
Set(Snowflake01X, RandBetween(0,App.Width));
Set(Snowflake02X, RandBetween(0,App.Width));
Set(Snowflake03X, RandBetween(0,App.Width));
Set(Snowflake04X, RandBetween(0,App.Width));
Set(Snowflake05X, RandBetween(0,App.Width));
Set(Snowflake06X, RandBetween(0,App.Width));
Set(Snowflake07X, RandBetween(0,App.Width));
Set(Snowflake08X, RandBetween(0,App.Width));
Set(Snowflake09X, RandBetween(0,App.Width));
Set(Snowflake10X, RandBetween(0,App.Width));
Set(Snowflake11X, RandBetween(0,App.Width));
Set(Snowflake12X, RandBetween(0,App.Width));
Set(Snowflake13X, RandBetween(0,App.Width));
Set(Snowflake14X, RandBetween(0,App.Width));
Set(Snowflake15X, RandBetween(0,App.Width));
Set(Snowflake16X, RandBetween(0,App.Width));
Set(Snowflake17X, RandBetween(0,App.Width));
Set(Snowflake18X, RandBetween(0,App.Width));
Set(Snowflake19X, RandBetween(0,App.Width));
Set(Snowflake20X, RandBetween(0,App.Width));
Set(snow,true);
Set(Timer1Start, true);
Add Timer1
OnTimerEnd
Set the Y axis so that
– If it’s now offscreen, go back to the top and give it a new X axis too
– If not, move down a bit
- Timer1:
Control: Timer
Properties:
OnTimerEnd: |-
=Set(Snowflake01Y, If(Snowflake01Y >= App.Height,Set(Snowflake01X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_1.Height, Snowflake01Y + Snowflake01Speed));
Set(Snowflake02Y, If(Snowflake02Y >= App.Height,Set(Snowflake02X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_2.Height, Snowflake02Y + Snowflake02Speed));
Set(Snowflake03Y, If(Snowflake03Y >= App.Height,Set(Snowflake03X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_3.Height, Snowflake03Y + Snowflake03Speed));
Set(Snowflake04Y, If(Snowflake04Y >= App.Height,Set(Snowflake04X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_4.Height, Snowflake04Y + Snowflake04Speed));
Set(Snowflake05Y, If(Snowflake05Y >= App.Height,Set(Snowflake05X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_5.Height, Snowflake05Y + Snowflake05Speed));
Set(Snowflake06Y, If(Snowflake06Y >= App.Height,Set(Snowflake06X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_6.Height, Snowflake06Y + Snowflake06Speed));
Set(Snowflake07Y, If(Snowflake07Y >= App.Height,Set(Snowflake07X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_7.Height, Snowflake07Y + Snowflake07Speed));
Set(Snowflake08Y, If(Snowflake08Y >= App.Height,Set(Snowflake08X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_8.Height, Snowflake08Y + Snowflake08Speed));
Set(Snowflake09Y, If(Snowflake09Y >= App.Height,Set(Snowflake09X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_9.Height, Snowflake09Y + Snowflake09Speed));
Set(Snowflake10Y, If(Snowflake10Y >= App.Height,Set(Snowflake10X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_10.Height, Snowflake10Y + Snowflake10Speed));
Set(Snowflake11Y, If(Snowflake11Y >= App.Height,Set(Snowflake11X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_11.Height, Snowflake11Y + Snowflake11Speed));
Set(Snowflake12Y, If(Snowflake12Y >= App.Height,Set(Snowflake12X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_12.Height, Snowflake12Y + Snowflake12Speed));
Set(Snowflake13Y, If(Snowflake13Y >= App.Height,Set(Snowflake13X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_13.Height, Snowflake13Y + Snowflake13Speed));
Set(Snowflake14Y, If(Snowflake14Y >= App.Height,Set(Snowflake14X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_14.Height, Snowflake14Y + Snowflake14Speed));
Set(Snowflake15Y, If(Snowflake15Y >= App.Height,Set(Snowflake15X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_15.Height, Snowflake15Y + Snowflake15Speed));
Set(Snowflake16Y, If(Snowflake16Y >= App.Height,Set(Snowflake16X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_16.Height, Snowflake16Y + Snowflake16Speed));
Set(Snowflake17Y, If(Snowflake17Y >= App.Height,Set(Snowflake17X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_17.Height, Snowflake17Y + Snowflake17Speed));
Set(Snowflake18Y, If(Snowflake18Y >= App.Height,Set(Snowflake18X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_18.Height, Snowflake18Y + Snowflake18Speed));
Set(Snowflake19Y, If(Snowflake19Y >= App.Height,Set(Snowflake19X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_19.Height, Snowflake19Y + Snowflake19Speed));
Set(Snowflake20Y, If(Snowflake20Y >= App.Height,Set(Snowflake20X, RandBetween(0,App.Width)); -RandBetween(10, 50)-Snowflake1_20.Height, Snowflake20Y + Snowflake20Speed));
Duration: =1
Repeat: =true
Start: =Timer1Start
Visible: =false
X: =10
Y: =10
Toggle1
- Toggle1:
Control: Classic/Toggle
Properties:
OnChange: =
OnCheck: =Set(snow,true);Set(Timer1Start, true);
OnUncheck: =Set(snow,false);Set(Timer1Start, false);
Default: =true
FalseText: ="No Snow"
TrueText: ="Yay Snow"
Size: =10
Visible: =themeToggle
Snowflake1_1
- Snowflake1_1:
Control: Image
Properties:
Image: =snowflake
Height: =RandBetween(20,100)
Visible: =snow
X: =Snowflake01X
Y: =Snowflake01Y
Repeat this for all your snowflakes, changing the variables for X and Y as you go