-- количество объектов
local numDots = 100
local dots = {}
function love.load()
love.window.setTitle("Falling Colorful Dots")
love.window.setMode(400, 400)
for i = 1, numDots do
table.insert(dots, createDot())
end
end
function createDot()
return {
x = math.random(0, love.graphics.getWidth()),
y = math.random(-600, 0),
speed = math.random(50, 200),
size = math.random(3, 7),
alpha = 1.0,
hue = math.random(),
life = math.random(2, 5) -- Время исчезновения
}
end
function love.update(dt)
for _, dot in ipairs(dots) do
dot.y = dot.y + dot.speed * dt
dot.alpha = math.max(0, dot.alpha - (dt / dot.life))
dot.hue = (dot.hue + dt * 0.2) % 1
-- Reset when off screen or fully transparent
if dot.y > love.graphics.getHeight() or dot.alpha <= 0 then
local new = createDot()
dot.x, dot.y = new.x, new.y
dot.speed, dot.size = new.speed, new.size
dot.alpha, dot.hue, dot.life = new.alpha, new.hue, new.life
end
end
end
-- Преобразование HSL в RGB (полезно для плавных радужных переходов)
function hslToRgb(h, s, l)
if s == 0 then return l, l, l end
local function hue2rgb(p, q, t)
if t < 0 then t = t + 1 end
if t > 1 then t = t - 1 end
if t < 1/6 then return p + (q - p) * 6 * t end
if t < 1/2 then return q end
if t < 2/3 then return p + (q - p) * (2/3 - t) * 6 end
return p
end
local q = l < 0.5 and l * (1 + s) or l + s - l * s
local p = 2 * l - q
local r = hue2rgb(p, q, h + 1/3)
local g = hue2rgb(p, q, h)
local b = hue2rgb(p, q, h - 1/3)
return r, g, b
end
function love.draw()
for _, dot in ipairs(dots) do
local r, g, b = hslToRgb(dot.hue, 1, 0.5)
love.graphics.setColor(r, g, b, dot.alpha)
love.graphics.circle("fill", dot.x, dot.y, dot.size)
end
end
Скачать кусок (zip)
Комментариев 2