pico-8 精彩代码解析 2
作者:2DArray
来源:twiiter
神奇的漩涡效果,代码发布在作者的twitter上,整理下只有11行:
p={130,141,2,136,8,137,142,9} for i=1,8 do pal(i-1,p[i],1) end ::_:: x=rnd(128) y=rnd(128) d=sqrt((x-64)^2+(y-64)^2)-t()*4 a=atan2(y-64,x-64)*16 pset(x,y,(a+d/4)%8) goto _
1-4行代码是调色板映射代码,用来实现渐变的颜色。我们知道pico8只有16种颜色,16种颜色很难配合出渐变的过渡效果。这里作者用到pico8隐藏的调色板,变量p中的130,141,136,137,142都是隐藏调色板的色号。这个隐藏的调色板在官方文档里也没有介绍,在论坛翻了了好久才找到,新旧两个调色板的对比,我做了个对比图:
6-9行定义了4个参数:
- x,y 在屏幕范围内随机取值
- d 是取的点(x,y)相对于(64,64)即中心点的距离,后面的t()*4 是为了使距离根据运行时间改变
- a 是点(x,y)相对于中心点的角度,pico8中atan2的返回值是0-1,对应这0°-360°。后面的*16将a的取值变成了0-16
第10行 根据d 和 a的值将对应颜色填充到x,y。我们可以分开来看下
pset(x,y,a%8)
如果只用a来计算,会将屏幕按照点的到中间点的角度分割成16份,这个比较好理解,因为a的取值是0-16,相当于把屏幕中的点映射到16个区域。
pset(x,y,(d/4)%8)
d是点到中心的距离,相同距离的圆形区域被填充同一个颜色。
pset(x,y,(a+d/4)%8)
当把角度和距离加起来的时候神奇的图像就出现了,而且角度a必须于8的倍数相乘才可以对齐,不知道原理是什么,真的很神奇。
(转发自:原日志地址)