https://harmonyos.51cto.com/#zz
总是做各种Demo,是时候做个什么小应用来练练手了。踌躇了很久,果然还是搞个小游戏才有意思。想到几年前风靡全球的FlappyBird,一个屏幕一个按钮就足够了,正好适合。OLED屏幕、按键的驱动已经有大牛们发布了,拿来用就可以。游戏逻辑什么的,用C语言实现也不是什么难事。主要目的就是要验证一下HarmonyOS复杂界面即时交互应用可行性。
这一篇我们主要解决屏幕绘制的问题,下一篇文章将把剩余的部分介绍完。
我们需要用变量记录小鸟的Y坐标、垂直速度、各个烟囱的位置、方向等数据,然后在主循环中不断更新他们,再渲染到屏幕上。
梳理一下主循环的流程,如图:
OLED的驱动,我使用了SiWei Xu老师的代码(Source地址)。对于BirdDrawScreen的部分,我们需要解决一个问题,那就是在渲染每一帧时,清空屏幕,然后在屏幕指定的位置绘制图片。为此,我自己写了一个函数ssd1306_DrawBitmapAtPosition,通过参数xo, yo指定要绘制的位置坐标。
- void ssd1306_DrawBitmapAtPosition(const uint8_t* bitmap, uint8_t width, uint8_t height, int8_t xo, int8_t yo)
- {
- for (uint8_t y = 0; y < height; y++) {
- if (yo + y > SSD1306_HEIGHT || yo + y < 0) continue;
- for (uint8_t x = 0; x < width; x++) {
- if (xo + x > SSD1306_WIDTH || xo + x < 0) continue;
- uint8_t byte = bitmap[(y * width / 8) + (x / 8)];
- uint8_t bit = byte & (0x80 >> (x % 8));
- ssd1306_DrawPixel(xo + x, yo + y, bit ? White : Black);
- }
- }
- }
小鸟和烟囱的图片代码,先用画图做好,再通过img2code.py可以轻松搞定。
这里小鸟只做了一帧,以后或许可以做成多帧动画效果。烟囱则是一个head和一段重复的body构成,以节约内存。
游戏逻辑没什么难点,主要就是小鸟有重力加速度,烟囱的随机生成、以固定速度移动并循环过场,碰撞检测等等。后面的文章会放出代码。上图:
下一篇,我们将加入按钮事件,控制小鸟的飞行。
https://harmonyos.51cto.com/#zz
1.我本来以为空气是免费的,直到我买了包薯片。 2.感情就像头发,长了会分叉。...
这里说的正则表达式优化,主要是针对目前常用的NFA模式正则表达式,详细可以参考...
多个进程可以同时打开同一个数据库。多个进程可以同时执行SELECT。但是,只有一...
目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),...
文章目录 一Python的random模块介绍 1.1 random.random() 1.2 random.uniform(a,...
? ? 老猿Python博文目录https://blog.csdn.net/LaoYuanPython ? 一、引言 前几天...
前言:在与传统的asp.net MVC项目相比,.net core项目在项目目录的文件结构上和功...
一、简介 基于matlab加权图像融合 二、源代码 clearg_R 0 ; g_G 0 ; g_B 0 ; h_R...
2 月 3 日消息 微软名为 PowerToys 的免费系统实用工具套件从 Windows XP 时代复...
JavaScript(JS)网页–动态生成表格,供大家参考,具体内容如下 在网页中,动态生...