PICO-8 01 初学制作Flappy Bird Demo
PICO-8是由Lexaloffle Games开发的游戏引擎。模仿了80年代八位机系统的有限图形和声音功能,以此来鼓励制作游戏的创造力和独创性,而不是被现代工具和机器的性能所淹没。
著名游戏《蔚蓝》的初始版本就是在PICO-8上完成的,你甚至可以在《蔚蓝》游戏内玩到初始的PICO-8版本。
PICO-8 编辑器
PICO-8主要包含两大块布局,通过顶部的标签卡来进行切换。右边的标签卡依次为代码、精灵图、地图、声音、音轨五个部分。左边的标签卡用于切换对应功能下的界面。
PICO-8使用lua语言来进行逻辑代码的编写,简单方便。
代码逻辑
PICO-8在代码上主要依靠三个内置函数
-- init函数用于进行游戏初始化的一些设置 |
精灵图绘制
由图可见,1号区域用于选择绘制图片的颜色。2号区域标识当前绘制的图片的编号,这在加载图片时有用。3号区域用于选择绘制的工具,有铅笔、印章、框选、移动、油漆桶、矩形绘制等等。4号区域用于放置绘制好的图片,上方还有4个标签卡用于在放不下时,扩充使用。
在绘制完毕后,在代码中可以使用SPR函数将对应的图片绘制到界面上
-- 第一参数用于指定绘制是哪张图片,即精灵图界面的图片编号,后面两个参数是绘制的位置x和y |
地图绘制
在地图绘制界面,依旧可以使用精灵图中的那些绘制工具,只不过绘制的内容从颜色变为了已经准备好的精灵图。选中了精灵图之后,即可在地图上绘制对应的内容,如云朵等。地图界面使用滚轮可以进行缩放,按下空格键,鼠标变为手的形状,可以进行上下左右拖动,同时会显示对应的格子,每个格子长宽各15个像素点。也就是说横竖各8个格子可以占满一个屏幕。
在_DRAW()
函数中,我们调用MAP()
函数即可将地图绘制到屏幕上了。不过_DRAW()
每次调用前都需要手动调用一下CLS()
函数,用于将上一帧的画面清除掉。
角色的移动
通过使用BTN
和BTNP
函数来实现对应的功能,BTN
函数用于检测按钮按下,BTNP
函数用于检测按钮按下且释放,也就是说如果一直按下按钮是不会触发这个函数的。由此当玩家按下特定按钮时,控制图片的绘制x,y坐标,即可完成角色的移动功能。
当我们制作2D平面游戏时,需要添加一下物理规律,比如重力,让角色每一帧都下降一个像素(当然如果需要更加拟真的话,可以设置加速度,让下落越来越快,直到达到一个最大值)
x,y 坐标系是以左上角为原点,所以在检测碰撞的时候,都需要加上对应宽高,形成一个矩形来跟对应的物体进行交叉判断。
Flappy Bird中地图移动
因为Flappy Bird中只要一直不碰撞到物体的话,就会无限前进,当然我们的地图是有限的,无法一直生成。那么就需要将已有的地图进行复用,但是地图的绘制是一上来就绘制完成的,不能动态放置,那么我们只要控制管道从右往左运动,让小鸟原地不动,就能造成一种在不停前进的错觉,等到管道运动到界面边缘,将其再次移动到最右边,就能达成我们需要的效果。