小伙伴们久等了,在上一篇《【开发板试用报告】用OLED板实现FlappyBird小游戏(上)》中,我们本着拿来主义的原则,成功的让小鸟在OLED屏幕上自由飞翔起来,下面我们将加入按钮交互功能。

这里感谢唐佐林老师的无私分享,利用他开发的按钮组件,开箱即用,节省了大量的开发时间(链接)。首先将按钮组件的初始化函数InitButton搬到我们的主程序中,再写一个按钮事件回调函数Button_Callback,里面加入对逻辑的判断和处理即可。

//按钮事件回调函数
static void Button_Callback(const char* sender, BtnEvent event)
{
printf("[Button] Button_Callback() : %s -> %d\n", sender, event); if( event == Pressed )
{
/* Pressed == 1 按下事件处理代码 */
if(isStarted == 0)
{
BirdStart();
}else{
BirdFlap();
}
}
} //按钮组件初始化
int InitButton(void)
{
printf("InitButton\n"); 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: %d\n", ret);
return ret;
}

其中isStart是一个全局变量,定义在Bird.h中,作为游戏是否开始的标志。

由于加入了游戏标题界面,在按钮按下时,这里有两种情况,如果是在游戏标题界面中,则开始游戏,即调用BirdInit和BirdStart函数;如果已经在游戏中,则调用小鸟扑腾函数BirdFlap。而BirdFlap就做一件事情,把小鸟的垂直方向速度置为固定值。这个值我经过多次调优,最终固定在-3.5。

看这张图能更容易理解坐标系和物体的运动:

其他的改进,包括右上角增加了一个分数指示器,具体就是用飞过的距离除以10得到。

相较第一篇,游戏流程基本没有变化,增加的是按钮的控制,由于使用了回调函数,即异步处理,代码阅读起来更友好也更简洁。

下面是效果图:

本来打算到此结束,后来一想其实还能做更多功能,比如联网对战?也欢迎大家留言告诉你的想法。

代码奉上。

【获取源码】

作者:老船夫

想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

【免费直播课-基于鸿蒙IoT套件的猜数字游戏开发实战分享】

【鸿蒙开发板试用报告】用OLED板实现FlappyBird小游戏(中)的更多相关文章

  1. 【鸿蒙开发板试用报告】用OLED板实现FlappyBird小游戏(上)

    总是做各种Demo,是时候做个什么小应用来练练手了.踌躇了很久,果然还是搞个小游戏才有意思.想到几年前风靡全球的FlappyBird,一个屏幕一个按钮就足够了,正好适合.OLED屏幕.按键的驱动已经有 ...

  2. iOS开发实战-基于SpriteKit的FlappyBird小游戏

    写在前面 最近一直在忙自己的维P恩的事情 公司项目也是一团乱 于是...随手找了个游戏项目改了改就上线了,就当充数了. SpriteKit简介 SpriteKit是iOS 7之后苹果推出的2D游戏框架 ...

  3. Android开发系列(十五):【Android小游戏成语连连看】第一篇

            学了一个多月安卓.由于暑假的时候要给朋友说写个小游戏.并且也想检測下自己的能力,所以说从7号開始就着手写这个小游戏了,前前后后带上课到今天总算是写完了,可是写的这个小游戏还是有非常多问 ...

  4. 【开发板试用报告】鸿蒙OS环境搭建及代码烧录

    鸿蒙系统的代码编译环境需要linux系统,软件开发和代码烧录需要windows环境. Linux环境 参考官方链接:https://gitee.com/openharmony/docs/blob/ma ...

  5. 【开发板试用报告】学习GPIO编程

    温湿度传感器 参考许老师教程:https://gitee.com/hihopeorg/ 下载源码git clone https://github.com/xusiwei/harmonyos-aht20 ...

  6. Android开发系列(十六):【Android小游戏成语连连看】第二篇

    写的晚了,在分工个Z市高中的一个成绩查询的系统,原系统居然是用VB写的,我不得不佩服原本写系统的那位哥们真能耐得住. 明天搭建下SVN就等着先发project款然后開始项目了.想想有工资进账,心里也为 ...

  7. Egret白鹭开发小游戏中容易犯的错

    在游戏开发过程中遇到问题,请首先查阅:http://developer.egret.com/cn/github/egret-docs/Engine2D/minigame/minigameFAQ/ind ...

  8. 【转】利用 three.js 开发微信小游戏的尝试

    前言 这是一次利用 three.js 开发微信小游戏的尝试,并不能算作是教程,只能算是一篇笔记吧. 微信 WeChat 6.6.1 开始引入了微信小游戏,初期上线了一批质量相当不错的小游戏.我在查阅各 ...

  9. 微信小游戏开发之四:使用three.js引擎

    一.前言 微信小游戏中最魔性的'跳一跳'就是基于three.js 引擎开发的 源码放到github上了:GitHub地址   请自行下载. 二.下载 three.min.js 打开页面,复制代码到本地 ...

随机推荐

  1. 【算法】HashMap相关要点记录

    在刷leetcode的算法题时,HashMap需要大量使用,而且也是面试的高频问题.这里记录了HashMap一些增.删.改.查的实现细节和时间复杂度,罗列了一些比较有用的方法,以及其它的一些细节. 1 ...

  2. Redis常用命令(3)——Hash

    HDEL 格式:HDEL key field [field ...] 作用:删除哈希表中的一个或多个域. 返回值:删除的域的个数. HEXISTS 格式:HEXISTS key field 作用:判断 ...

  3. 小白自己对while循环的理解

  4. ashx接收前台传来的数据

    前台js: $(function () { $.ajax({ url: "/TestAshx/GetJson.ashx", type: "post", data ...

  5. php获取快手视频id

    <?php $url = "http://www.gifshow.com/s/xxxxxx"; //初始化 $curl = curl_init(); //设置抓取的url c ...

  6. VMware虚拟机 - 如何让鼠标从虚拟机中返回到个人计算机中

    最简单的方式 按快捷键:ctrl+alt即可 彻底解决问题的方法:安装VMware Tools 前提条件 开启虚拟机 确认客户机操作系统正在运行 因为 VMware Tools 安装程序是使用 Per ...

  7. Goldstone's theorem(转载)

    Goldstone's theorem是凝聚态物理中的重要定理之一.简单来说,定理指出:每个自发对称破缺都对应一个无质量的玻色子(准粒子),或者说一个zero mode. 看过文章后,我个人理解这其实 ...

  8. Loadrunner学习(一)

    一个优秀的软件系统不单单具有良好的功能,还需要有过硬的性能,一个只通过功能测试的系统,只能称之为"可用",而不能算是"好用".当然,性能测试需要基于功能测试,只 ...

  9. CephFS cache tier实践

    这是一篇分享文,作者因为最近想深入研究下ceph的cache pool,作者写的文章非常的好,这里先直接翻译这篇文章,然后再加入我自己的相关数据 blog原文 作者想启动blog写下自己的Openst ...

  10. rgw实现nfs的首测

    功能介绍 关于rgw实现nfs接口这个,刚接触的人可能并不清楚这个是个什么样的服务架构,rgw是ceph里面的对象存储接口,而nfs则是纯正的网络文件系统接口,这二者如何结合在一起,关于这个,有几个相 ...