完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小伙伴们久等了,在上一篇《【开发板试用】用OLED板实现FlappyBird小游戏(上)》中,我们本着拿来主义的原则,成功的让小鸟在OLED屏幕上自由飞翔起来,下面我们将加入按钮交互功能。
这里感谢唐佐林老师的无私分享,利用他开发的按钮组件,开箱即用,节省了大量的开发时间(链接)。首先将按钮组件的初始化函数InitButton搬到我们的主程序中,再写一个按钮事件回调函数Button_Callback,里面加入对逻辑的判断和处理即可。 //按钮事件回调函数static void Button_Callback(const char* sender, BtnEvent event){ printf("[Button] Button_Callback() : %s -> %dn", sender, event); if( event == Pressed ) { /* Pressed == 1 按下事件处理代码 */ if(isStarted == 0) { BirdStart(); }else{ BirdFlap(); } }}//按钮组件初始化int InitButton(void){ printf("InitButtonn"); int ret = 0; ret += DTButton_Init(); // 初始化按键事件处理上下文 /* 设置GPIO_8按键的回调函数,同时需要响应按下,释放以及长按三个事件 */ /* 按键触发顺序: Pressed -> LongPressed(optional) -> Released */ ret += DTButton_Enable("GPIO_8", Button_Callback, Pressed | LongPressed | Released); /* 设置S1按键的回调函数 */ ret += DTButton_Enable("S1", Button_Callback, Pressed); printf("InitButton: %dn", ret); return ret;} 其中isStart是一个全局变量,定义在Bird.h中,作为游戏是否开始的标志。 由于加入了游戏标题界面,在按钮按下时,这里有两种情况,如果是在游戏标题界面中,则开始游戏,即调用BirdInit和BirdStart函数;如果已经在游戏中,则调用小鸟扑腾函数BirdFlap。而BirdFlap就做一件事情,把小鸟的垂直方向速度置为固定值。这个值我经过多次调优,最终固定在-3.5。 看这张图能更容易理解坐标系和物体的运动: 其他的改进,包括右上角增加了一个分数指示器,具体就是用飞过的距离除以10得到。 相较第一篇,游戏流程基本没有变化,增加的是按钮的控制,由于使用了回调函数,即异步处理,代码阅读起来更友好也更简洁。 下面是效果图: 本来打算到此结束,后来一想其实还能做更多功能,比如联网对战?也欢迎大家留言告诉你的想法。 代码奉上。 文章来自网络 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
2204个成员聚集在这个小组
加入小组HiSpark IPC AI摄像头(Hi3518E)串口能输入输出吗?
695 浏览 1 评论
【星闪派物联网开发套件体验连载】使用Dockerfile搭建润和WS63E的开发环境
793 浏览 0 评论
【星闪派物联网开发套件体验连载】用HiHope星闪server端BearPi星闪client端互相发代码控制对方板载灯
1190 浏览 0 评论
【星闪派物联网开发套件体验连载】用HiHope星闪server端发代码控制BearPi
727 浏览 0 评论
【星闪派物联网开发套件体验连载】智能交通灯--云端查看,远程控制视频
1203 浏览 0 评论
12054浏览 10评论
1879浏览 3评论
1204浏览 2评论
1032浏览 2评论
993浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 08:18 , Processed in 0.949026 second(s), Total 48, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号