Microptyhon制作小游戏DinoRun
0x00 前言
去年入手了一块M5StickC,然后吃灰了好久。最近有幸把它找了出来,然后复习了一些基本操作。
因为M5StickC自带了按钮和屏幕,所以玩起来要方便很多,不用额外的接线,就可以实现很多有趣的效果。
官方的固件支持Micropython开发,而且集成了屏幕驱动,操作起来十分的方便,只要把它当作一个实体显示的画板即可。
0x01开发思路
之前看了一篇使用Flutter开发DinoRun的文章,那篇文章提到了一个设计原则
1 | while True: |
游戏里的每一个组件必须具备两个基本方法:
update和render
- update是对数据进行更新,如物体的状态.速度.位置.
- render是绘制该组件,使其呈现在画面上
遵循这个思路,那么开发就可以开始了
0x02 开发记录
使用VSCode进行代码编写,然后配合Putty的串口通信功能,最后配合PhotoShop进行测绘。
每次写好代码,就在Putty中Ctrl+E(开启粘贴模式)和右键(粘贴)再Ctrl-D(结束粘贴模式)即可.
大概花了半周的时间,先熟悉了M5StickC的基本Api,然后开始制作。最后完成度还算挺高的(吧?)。这样比较方便调试,写完以后可以使用ampy上传到板子里,这样就不会因为重启丢失脚本了。
游戏里的组件有恐龙,障碍生成器,云朵生成器。
每次update的时候,会将生成的云朵和障碍x坐标减少,当云朵或者障碍离开屏幕的时候就会生成一个新的云朵或障碍。
由于对象x坐标的变化,在绘制的时候就会产生向左移动效果。
对于恐龙,每次update会增加内置计数器的值。我使用这个计数器来进行脚步的切换,从而产生走路的效果。
为了模拟现实当中的重力效果,所以小恐龙上升的过程中,速度越来越小,而下降的过程中,速度越来越大。
0x03 成果展示
视频展示:给自己做个游戏机(吧)
0x04 总结
借助update和render的理念,即可开发出各种小游戏。
在图像更新的时候也学到了一些小技巧,比如每一帧画面并不是完全的刷新,只刷新发生变化的那一块区域。
如果使用全局刷的话,刷新以后还需要重新绘制,这样做会严重浪性能。
以本案例中的云朵为例子,每次更新记录上一帧的坐标,然后在绘制之前先将上一帧绘制的内容清空,在绘制本帧的内容。
0x05 附录
代码地址:GitHub