u(t) is called 60 times per second.
t: Elapsed time in seconds.
S: Shorthand for Math.sin.
C: Shorthand for Math.cos.
T: Shorthand for Math.tan.
R: Function that generates rgba-strings, usage ex.: R(255, 255, 255, 0.5)
c: A 1920x1080 canvas.
x: A 2D context for that canvas.
swap .7 for speed, for crazy things like:with(x)for(i=n=90;--i;)F=(f,m)=>Math.abs(m-t*.4*f(i*1.5/n)*2e3%(2*m)),font='90px a',fillText('🌚🌝🍀'.substr((i%3)*2,2),F(C,1920),F(S,1e3))
Using u/magna's [...font] trick in d/8783, and removing an extra invisible character that appears in the list of balls (VARIATION SELECTOR - its absence may change the ball look for some people? didn't for me), it became possible to restore the screen-clearing. with(x)for(c.width|=i=n=23;--i;)F=(f,m)=>Math.abs(m-t*.7*f(i*1.5/n)*2e3%(2*m)),fillText([...font='90px ⚽🏀🏈'][5+i%3],F(C,1920),F(S,1e3))
u(t) is called 60 times per second.
t: elapsed time in seconds.
c: A 1920x1080 canvas.
x: A 2D context for that canvas.
S: Math.sin
C: Math.cos
T: Math.tan
R: Generates rgba-strings, ex.: R(255, 255, 255, 0.5)