W801学习笔记十六:掌机系统——启动第一个应用

在开始游戏应用开发之前,我们先搞一个简单的应用,目的是把菜单操作与应用启动之间打磨平顺。

这里,我们做一个关于About页面即可。

1、菜单项JSON的定义:

[{"t": "关于","i": "menu/test16.png","d": 102,"g": {},"s": []}
]

其中,"d": 102  是这个应用的ID号。

2、实现About页面

About.h

class About : public IScean
{public:About();   ~About();  SceanResult tick(u32 ticks);int scean_init(cJSON* param);
private:u16 colorIndex;DisplayOption option1 = {FONT_SIZE_1516, WHITE, BLACK, 0, 0};DisplayOption option2 = {FONT_SIZE_1516, YELLOW, BLACK, 0, 0};u32 _aboutInterval;
};

About.cpp

About::About(void)
{
}About::~About(void)
{printf("Destory About.\n");
}int About::scean_init(cJSON*  param){clear_screen();Display_String(240, 260, &option2, "深圳市杨梅科技有限公司");show_status_info("EXIT:返回");setKeyAdepterIntervalAll(100);return 0;
}#define AboutInterval 10SceanResult About::tick(u32 ticks){if(KEY_EXIT) {printf("goto top menu from About.\n");return SceanResult_EXIT;}if(_aboutInterval > ticks){_aboutInterval -= 	ticks;return SceanResult_Done;}_aboutInterval = AboutInterval;colorIndex+=3;option1.foreColor = cvColorIdx2RGB(colorIndex);Display_String(50, 100, &option1, R"( __  ______  __  ____  ______  ____  ______  __ )");Display_String(50, 116, &option1, R"( \ \/ / __ \/ / / /  \/ / __ \/    \/ __ \ \/ / )");Display_String(50, 132, &option1, R"(  \  / /_/ / /_/ / /\  / /_/ / / / / /_/ /\  /  )");Display_String(50, 148, &option1, R"(  / /\____/\____/_/ /_/\__  /_/_/_/\___,_\/ /   )");Display_String(50, 164, &option1, R"( /_/                  /____/             /_/    )");return SceanResult_Done;
}

3、在menu.cpp中根据ID启动该应用

。。。#define SceanId_About 102。。。SceanResult Menu::tick(u32 ticks){if(KEY_EXIT){ // 返回cJSON*  currentMenu =  (cJSON *)menuList->prev->data;if(	currentMenu == menuRoot) return SceanResult_Done;ListPopBack(menuList);showMenu ();return SceanResult_Done;}if(KEY_SEL){ //进入cJSON* item =  (cJSON*) ctlList->selectItem()->tag;int sceanId = cJSON_GetObjectItem(item,"d")->valueint;if(sceanId!= 0){IScean *scean =createScean(sceanId);if(scean !=NULL){scean->scean_init(cJSON_GetObjectItem(item,"g"));ListPushBack(sceanList, scean);}return SceanResult_Done;}cJSON* sitem =  cJSON_GetObjectItem(item,"s");if(cJSON_GetArraySize(sitem) > 0){ListPushBack(menuList, sitem);			showMenu();return SceanResult_Done;}return SceanResult_Done;}ctlList->tick(ticks);ran_max(10);return SceanResult_Done;
}IScean* Menu::createScean(u32 idx){switch (idx) {case SceanId_About:return new About();}return NULL;
}

注意这个地方启动应用:

if(sceanId!= 0){
            IScean *scean =createScean(sceanId);
            if(scean !=NULL){
                scean->scean_init(cJSON_GetObjectItem(item,"g"));
                ListPushBack(sceanList, scean);
            }
            return SceanResult_Done;
        }

没有做完全的动态加载,只是实现了按需实例化应用。后面再研究能不能像安卓那样加载应用。

看看效果:

W801学习笔记十六:掌机系统——启动第一个应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/4956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

与Apollo共创生态:七周年大会深有体会!

前言 百度从2013年开始涉足自动驾驶领域。2017年3月1日,百度通过内部邮件宣布,将现有业务和资源整合,成立智能驾驶事业群组(简称IDG)。同年,在上海车展上,百度发布了“Apollo计划”&#xff0c…

Git:克隆代码,提交流程,分支提交流程

1.克隆代码 git clone http://…(代码地址) 克隆代码到本地 2.提交流程(不牵涉分支) 1)git add . 将本地修改的文件暂存到缓存区 2)git commit -m "当次提交解释说明备注" 在日志中显示 3)git…

0426GoodsBiddingAJAX项目

0426GoodsBiddingAJAX项目包-CSDN博客 数据库字段 ​ 管理员的登录界面 ​ 登录成功跳转在线拍卖界面,使用监听器拦截请求,只能登录管理员后访问该界面 ​ 商品竞拍列表 ​ 商品竞拍列表的竞拍操作: ​ 1 用户未登录跳转用户登录界面&#x…

面向对象编程三大特征:封装、继承、多态

封装、继承、多态 1. 封装 1.1 介绍 封装(encapsulation)就是把抽象出的数据 [属性] 和对数据的操作 [方法] 封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作 [方法] ,才能对数据进行操作。 1.2 封装的理解和好处 1) 隐藏实现细节:方法(连接数据库)<…

STM32CubeMX+MDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)续-音质问题解决总结

一、前言 之前进行了STM32CubeMXMDK通过I2S接口进行音频输入输出&#xff08;全双工读写一个DMA回调&#xff09;的研究总结&#xff1a; https://juejin.cn/post/7339016190612881408#heading-34 后续音质问题解决了&#xff0c;目前测试下来48khz的双声道使用效果很好&…

JSON.toJSONString() 输出 “$ref“:“$[0]“问题解决及原因分析

一、背景 在构建一个公共的批处理方法类的时候&#xff0c;在测试输出的时候&#xff0c;打印了" r e f " : " ref":" ref":"[0][0]"的内容&#xff0c;这让我比较疑惑。不由得继续了下去… 二、问题分析 首先&#xff0c;我们需要…

安卓开发Webview RTC 适配

一、场景 在混合开发方式中&#xff0c;项目前端使用了tracking.js 开发了一个人脸识别功能&#xff0c;但是在安卓端无法成功调用摄像头进行视频捕获&#xff0c;在浏览器中可以正常使用该功能。 二、问题分析 之前的音视频文件适配提供给前端的方式&#xff0c;都是通过inp…

@Injectable()

当你在 Nest.js 中使用 Injectable() 装饰器标记一个类时&#xff0c;它告诉 Nest.js 这个类是一个可以被注入到其他地方使用的服务。这意味着你可以在你的应用中的不同地方重复使用这个服务&#xff0c;而不必每次都手动创建它的实例。 比如说&#xff0c;假设你有一个服务叫…

【信息系统项目管理师知识点速记】范围管理:定义范围

定义范围是制定项目和产品详细描述的过程。其主要作用是描述产品、服务或成果的边界和验收标准。本过程需要在整个项目期间多次反复开展。 9.5.1 输入 项目章程 包含对项目的高层级描述、产品特征和审批要求。项目管理计划 范围管理计划:记录了如何定义、确认和控制项目范围的…

第八节 LLaVA模型CLI推理构建custom推理代码Demo

文章目录 前言一、parser 参数设定1、lora权重推理2、非lora权重推理3、量化权重推理4、实验总结 二、初始化模型三、模型推理四、完整代码Demo 前言 我在第七节介绍了cli.py推理源码解读&#xff0c;而我也因项目需要构建了推理demo&#xff0c;我们是用来自动生成标签和推理…

Rust Vec<T> 集合使用教程

Rust Vec 集合使用教程 文章目录 Rust Vec<T> 集合使用教程1. 创建和初始化 Vec<T>代码示例运行结果 2. 访问和修改 Vec<T> 中的元素代码示例运行结果 3. 添加和删除 Vec<T> 中的元素代码示例运行结果 4. 遍历 Vec<T>代码示例运行结果 5. 使用 V…

web服务的部署及高级优化

搭建web服务器 1.1、配置主机IP以及软件仓库搭建 [rootserver129 ~]# vmset.sh 100 //主机IP配置为172.25.254.100 1.2、查看搭建web服务器所需的软件包 [rootserver100 ~]# dnf search nginx 名称 精准匹配&#xff1a;nginx nginx.x86_64 : A high performance web serve…

头歌实践教学平台:CG7-v2.0-实体消隐

第1关&#xff1a;立方体消隐 一. 任务描述 1. 本关任务 (1) 理解深度缓冲器算法(Z-Buffer)算法; (2) 将triangle函数和main函数中的空白部分补充完整。 2. 输入 (1) 代码将自动输入一个边长为1的obj正方体模型&#xff0c;具体模型如下图&#xff1a; (2) 代码会自动对将…

Kafka Exactly Once 语义实现原理:幂等性与事务消息

01 前言 在现代分布式系统中&#xff0c;确保数据处理的准确性和一致性是至关重要的。Apache Kafka&#xff0c;作为一个广泛使用的流处理平台&#xff0c;提供了强大的消息队列和流处理功能。随着业务需求的增长&#xff0c;Kafka 的事务消息功能应运而生&#xff0c;它允许应…

力扣279完全平方数

力扣279完全平方数 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;…

【OceanBase诊断调优】—— OceanBase 数据库日志解读

适用版本&#xff1a;V2.1.x、V2.2.x、V3.1.x、V3.2.x observer.log 日志 OBServer 启动日志 搜索关键字&#xff1a; [NOTICE] 日志说明&#xff1a; OBServer 启动过程中比较关键的日志信息。 [2023-05-11 14:19:09.703272] INFO [SERVER] ob_server.cpp:533 [95303][0]…

单链表的经典oj题(1)

前言 这次博客将要以图解的形式&#xff0c;把单链表的经典题目&#xff0c;讲解&#xff0c;绝对是干货&#xff0c;来吧兄弟萌 第一题 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 …

USB HID报告描述符学习

参考资料 HID 报告描述符 (qq.com)https://mp.weixin.qq.com/s?__bizMzU1ODI3MzQ1MA&mid2247485748&idx1&sn112bd8014eb96b03308b3b808549e8d4&chksmfc284ff1cb5fc6e770c2d2ece46c17bf2529901b45a357938978fa62163723556ad497b05c47&cur_album_id3340417…

力扣经典150题第四十七题:汇总区间

目录 题目描述和要求示例解释解题思路算法实现复杂度分析测试和验证总结和拓展参考资料 题目描述和要求 给定一个无重复元素的有序整数数组 nums&#xff0c;要求返回恰好覆盖数组中所有数字的最小有序区间范围列表。即&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖…

三、VLAN间路由(三层交换)

VLAN间路由可以通过二层交换机配合路由器来实现&#xff0c;也可以通过三层交换机来实现。 目录 1.单臂路由 2.通过三层交换机实现不同vlan的互访 1.单臂路由 注&#xff1a; 1.三层接口不能正确识别带vlan tag的数据帧 2.所有子接口与主接口共享MAC地址 命令 int g0/0/0.1…