更多信息请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz朋友们已经等了很久了。在上篇文章《【开发板试用】用OLED板实现FlappyBird小游戏(上)》中,我们成功地让小鸟基于带走的原理,在OLED屏幕上自由飞翔。接下来,我们将添加按钮交互功能。在此感谢唐作霖先生的无私分享。使用他开发的按钮组件可以开箱即用,节省了大量的开发时间(链接)。先把按钮组件的初始化函数InitButton移到我们的主程序中,然后写一个按钮事件回调函数Button_Callback,可以加入逻辑判断和处理。//按键事件回调函数staticvoidButton_Callback(constchar*sender,BtnEventevent){printf([Button]Button_Callback():%s->%d\n",sender,event);if(event==Pressed){/*Pressed==1按下事件处理代码*/if(isStarted==0){BirdStart();}else{BirdFlap();}}}//Button组件初始化intInitButton(void){printf("InitButton\n");intret=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);returnret;}其中isStart是一个全局变量,定义在Bird.h中,作为游戏是否开始的标志。由于增加了游戏标题界面,按键按下时,有两种情况。如果是在游戏标题界面,则游戏开始,即调用BirdInit和BirdStart函数;如果它已经在游戏中,则调用birdflutter函数。鸟皮瓣。而BirdFlap只做一件事,将小鸟的垂直速度设置为固定值。我多次调整这个值,最后固定在-3.5。看这张图更容易理解坐标系和物体的运动:其他改进,包括在右上角增加了一个分数指示器,它是通过将行进的距离除以10得到的。与第一篇相比,游戏流程基本不变,只是增加了按钮控件。因为使用了回调函数,即异步处理,所以代码阅读起来更加友好和简洁。下面是效果图:本来打算到这里就结束了,后来想想其实还可以做更多的功能,比如联机对战?也欢迎大家留言说说自己的想法。提供了代码。了解更多请访问:与华为官方共建鸿蒙科技社区https://harmonyos.51cto.com/#zz
