引言
pico-8 的社区是一个满是热情与分享精神的社区,无数玩家与开发者贡献着代码。本系列日志将选取其中比较精彩的代码片段进行解析,学习其中的算法思路。本文将讲解如何实现漩涡的效果。
效果
代码分析
作者:2DArray
来源:twiiter
神奇的漩涡效果,代码发布在作者的 twitter 上,整理下只有 11 行:
p={130,141,2,136,8,137,142,9}for i=1,8 do |
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
的倍数相乘才可以对齐,不知道原理是什么,真的很神奇。