【鸿蒙开发板试用】用OLED板实现FlappyBird小游戏(中)

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

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

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

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

  1. //按钮事件回调函数 
  2. static void Button_Callback(const char* sender, BtnEvent event) 
  3.     printf("[Button] Button_Callback() : %s -> %d\n", sender, event); 
  4.  
  5.     if( event == Pressed ) 
  6.     {  
  7.         /* Pressed == 1     按下事件处理代码 */  
  8.         if(isStarted == 0) 
  9.         { 
  10.             BirdStart(); 
  11.         }else
  12.             BirdFlap(); 
  13.         } 
  14.     } 
  15.  
  16. //按钮组件初始化 
  17. int InitButton(void) 
  18.     printf("InitButton\n"); 
  19.  
  20.     int ret = 0; 
  21.  
  22.     ret += DTButton_Init(); // 初始化按键事件处理上下文 
  23.  
  24.     /* 设置GPIO_8按键的回调函数,同时需要响应按下,释放以及长按三个事件 */ 
  25.     /* 按键触发顺序: Pressed -> LongPressed(optional) -> Released */ 
  26.     ret += DTButton_Enable("GPIO_8", Button_Callback, Pressed | LongPressed | Released); 
  27.  
  28.     /* 设置S1按键的回调函数 */ 
  29.     ret += DTButton_Enable("S1", Button_Callback, Pressed); 
  30.  
  31.     printf("InitButton: %d\n", ret); 
  32.     return ret; 

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

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

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


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

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

下面是效果图:


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

代码奉上。

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

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2020-11-25 11:55:47

FlappyBird

2021-01-15 12:15:36

鸿蒙HarmonyOS游戏

2021-09-02 15:25:53

鸿蒙HarmonyOS应用

2020-11-26 12:02:07

OneNet平台

2020-11-27 11:52:40

OneNet

2020-10-30 17:42:36

鸿蒙 OS Hi386

2020-11-17 12:15:36

MQTT开发

2020-11-03 09:53:04

体验官方固件程序

2020-12-29 09:59:01

鸿蒙HarmonyOS智能家居

2020-12-11 12:45:04

鸿蒙Hi3861游戏

2020-12-16 10:05:48

鸿蒙开发板Onenet平台

2020-10-20 09:32:43

HiSparkWi-FiIoT

2021-12-30 16:12:07

鸿蒙HarmonyOS应用

2020-11-11 10:06:15

鸿蒙

2021-09-08 15:44:56

鸿蒙HarmonyOS应用

2020-12-09 09:44:29

Hi3861硬件介绍鸿蒙开发板

2021-12-15 15:28:18

鸿蒙HarmonyOS应用

2022-07-08 14:53:46

扫雷小游戏鸿蒙

2020-12-07 12:34:33

开发板鸿蒙hello world

2020-11-03 12:26:55

Hi3861
点赞
收藏

51CTO技术栈公众号