1324|3

402

帖子

9

TA的资源

纯净的硅(初级)

楼主
 

在BL808上实现电子宠物生活环境昼夜的变化 [复制链接]

 

在前文(https://bbs.eeworld.com.cn/thread-1230538-1-1.html)中,我们已经用lvgl在BL808上实现了小狮子的奔跑跳跃功能,在本篇中,我们将实现修改宠物的日夜环境,以及日夜中宠物的不同行为。

首先,我们认为狮子是晚上活动,白天睡觉的动物,所以把时间段分为3块:白天、傍晚、夜间,每个时间段,狮子的活动频率各不相同。

接下来,把宠物的栖息地在地图上标注出来。

 

宠物可以待的地点在图中标注出来,有7个,每个地点宠物方向可以是朝左或者朝右,可以是站姿或者躺姿(A的位置太小,认为狮子不会在狭小位置睡觉),所以一共有26个初始状态。

根据这26个初始状态,决定了宠物狮子可以做的动作一共有47种(当然只是暂时的,未来肯定还准备继续扩,比如从G到C掉下来摔扁了,E到F的爬坡动作等等),把这47种动作全部写在一个函数里面封装起来,只通过动作序号作为参数就可以调用,返回值是动作结束后下一个动作的初始状态值。

把对应关系做成一个表格:

状态机.xlsx (11.93 KB, 下载次数: 2)

在上面的表格中,发生动作的概率系数直接用整数(主要是为了在代码中好实现一些),表格中没有出现的对应关系发生概率为0。

将上述表格转换成一个3*26*47的数组(action_chance[3][26][47]),根据这个数组,通过随机值决定小狮子的下一步动作。

白天大概率是在睡觉

 

傍晚活力稍强一些,开始做一些运动

 

夜间就基本不睡觉啦

 

 

 

除了宠物本身的动作,背景环境也发生了变化,主要有太阳位置的变化和背景色的变化。

太阳是采用lvgl中arc控件实现的,通过lv_obj_set_style_arc_opa函数把LV_PART_MAIN和LV_PART_INDICATOR的透明度设置为0,就只可以留下LV_PART_KNOB,显示为可以在弧线运动的一个圆,通过lv_obj_set_style_bg_color(arc, lv_palette_main(LV_PALETTE_RED), LV_PART_KNOB);将其设置为红色,就可以当做太阳使用了。lv_arc_set_value(arc,sun_time);就可以设置太阳所在位置了。将arc设置够大,选择合适位置放置,当LV_PART_KNOB在屏幕内就是白天,移出屏幕后就是晚上。

根据不同时间段,作出背景的混色效果,并决定狮子可以按照哪种概率活动。

 

通过设置lv_obj_set_style_bg_main_stop和lv_obj_set_style_bg_grad_stop实现地平线效果后,天空可以由亮蓝(白天)变成红(傍晚)再变成深蓝(夜间),地面的颜色也在对应变化。

 

15c63105bf98a1e01e7a5f943595c326

 

最新回复

看起来就很好玩  详情 回复 发表于 2023-1-12 07:51
点赞 关注
 
 

回复
举报

7244

帖子

2

TA的资源

版主

沙发
 

再来些互动,就可以给小孩子当游戏了!

 
 
 

回复

4942

帖子

19

TA的资源

版主

板凳
 

有趣好玩 是电子宠物

 
 
 

回复

2642

帖子

6

TA的资源

五彩晶圆(初级)

4
 

看起来就很好玩


 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表