-- part
parts={}
parts_next=1
-- 粒子的对象池
for i=0,400 do
add(parts,{t=0})
end
-- t:time d:加速度 s:半径 ds:半径变化率 c:color bc:border color
function parts_spawn(t,x,y,vx,vy,d,s,ds,c,bc)
parts_next=next_i(parts,parts_next)
local p=parts[parts_next]
p.t,p.x,p.y,p.vx,p.vy,p.d,p.s,p.ds,p.c,p.bc=t,x,y,vx,vy,d,s,ds,c,bc
end
--
function parts_explode(count,br,rr,t,bx,by,rx,ry,d,s,rs,ds,c,bc)
for i=1,count do
local a,r=rnd(),br+rnd(rr)
local vx,vy=r*cos(a),r*sin(a)
parts_spawn(t,bx+rnd(rx),by+rnd(ry),vx,vy,d,s+rnd(rs),ds,c,bc)
end
end
--
function parts_update()
for k,p in pairs(parts) do
if p.t>0 then
p.t-=one_frame
p.vx*=p.d
p.vy*=p.d
p.x+=p.vx
p.y+=p.vy
p.s=max(0,p.s+p.ds)
if p.s<=0 then
p.t=0
end
end
end
end
--
function part_draw(p,o,c)
circfill(flr(p.x),flr(p.y),p.s+o,c)
end
--
function parts_draw()
--先绘制border 为底
for k,p in pairs(parts) do
if p.t>0 then
part_draw(p,1,p.bc)
end
end
--再绘制part颜色,在前层。先后顺序,可以绘制融合的效果
for k,p in pairs(parts) do
if p.t>0 then
part_draw(p,0,p.c)
end
end
end