PICO-8

创建于:2017-11-26

创建人: Humble Ray

5 信息 27 成员
Fantasy Console 的代表 PICO-8 小巧精美多变

pico-8 精彩代码解析 4

83872309 2019-11-02

Image title

作者: Luca Harris @lucatron_

来源:twitter


整理了一下作者的代码,共计15行:

for i=0,11 do
 pal(i,({135,10,9,137,8,136,2,130,128})[i+1],1)
end
function _draw()
 srand(3)
 rectfill(0,0,127,40,0)
 for y=52,170,2 do
  k=y/19-2
  x=y*44%138-4
  h=40+rnd(20)
  for i=-20,20 do
   line(x+i*h/70,y,x+sin(t()/4+x/500+y/300)/7*h,y-h,i>0 and k+2 or k)
  end
 end
end

1-3行, 将调色板的颜色映射,这里用到了第二块调色板的颜色,更好的表示渐变。关于第二块调色板的内容,在解析 2里有详细说明。

5行, 初始随机数种子,在计算树木高度的时候详细解释为什么每次绘制要初始随机数

6行, 画背景,我们用cls()代替手动绘制背景,可以更好的测试

7行, 循环得到y,y值是树的y轴位置,从52-170,每两个树之间相差2

8行, k用来将树按照y值的顺序,映射到调色板的色值,实现近景到远景的颜色渐变

9行, 计算树的x坐标,根据y轴坐标的倍数与138取余,就把树木限制在0-138的范围内一排排的码好。

10行, 计算树木的高度h,这里每棵树的高度是随机的,但是每帧绘制的时候同一棵树的高度是不变的,也就是每一帧绘制的时候rnd(20)会得到同一个随机值,这就得益于在第5行,绘制开始的时候重新初始化随机数种子,使得每帧获得随机数是一致的。

11-13行,绘制一棵树。pico8没有直接绘制三角形的函数,这里用40根线段拼成了一个三角形。我们先看下简化的代码,line(x+i,y,x,y-h,i>0 and k+2 or k) 。i值(-20 -> 20)是三角形底边的x轴偏移量,从线段 起点(x-20,y) 终点 (x,y-h) 到  起点 (x+20,y) 终点 (x,y-h)] 共计画了40跟线段组成了三角形,三角形的底边宽40。简化的效果图如下。

Image title

line(x+i*h/70,y,x+sin(t()/4+x/500+y/300)/7*h,y-h,i>0 and k+2 or k) 原代码计算起点时将偏移量i乘以树木的高度h/70用来表示,矮的树木拥有更窄的底边。计算终点时,树尖的x坐标根据时间,取正弦值,用来模拟来回摆动的效果,且越矮的树木摆动幅度越低。最后根据偏移量i来觉得颜色,i<0为树木左半边,i>0为树木右半边。


(转发自:原日志地址

近期喜欢的会员

 
?宇~ 2020-11-29
嘿,兄弟,接着写啊~你写的分析很有帮助~
 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册