【开发板试用】用OLED板实现FlappyBird小游戏(中) 原创 精华

老船夫
发布于 2020-11-29 21:16
浏览
5收藏

    小伙伴们久等了,在上一篇《【开发板试用】用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。

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

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

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

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

    下面是效果图:

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

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

    代码奉上。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
flappy_bird.rar 40.54K 209次下载
Hi3861_wifiiot_app_allinone.rar 472.54K 219次下载
已于2021-1-11 23:58:36修改
11
收藏 5
回复
举报
8条回复
按时间正序
/
按时间倒序
鲜橙加冰
鲜橙加冰

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

https://harmonyos.51cto.com/posts/1806

 

兢兢业业老船夫,专栏地址:

https://harmonyos.51cto.com/column/16

已于2020-11-30 10:10:47修改
回复
2020-11-29 21:21:59
wx5facf1230bf8c
wx5facf1230bf8c

代码已经提交到 gitee ,地址:https://gitee.com/harmonyhub/flappy-bird

回复
2020-11-29 22:05:39
老船夫
老船夫 回复了 wx5facf1230bf8c
代码已经提交到 gitee ,地址:https://gitee.com/harmonyhub/flappy-bird

好谢谢,方便多了

回复
2020-11-29 22:40:22
jiecho
jiecho

支持一波,期待下篇

回复
2020-11-30 10:12:30
SummerRic
SummerRic

文章不错,可以上传个头像哦~

回复
2020-11-30 13:38:15
longlong899
longlong899

下一篇更精彩!!!

回复
2020-11-30 15:30:42
唐佐林
唐佐林

多谢开箱试用!!!

后续需要框架支持什么功能可以提ISSUE!

https://gitee.com/delphi-tang/dtframe

回复
2020-11-30 15:45:51
wx620f5aea6a51c
wx620f5aea6a51c

牛牛牛

回复
2022-2-28 15:22:33
回复
    相关推荐