(一)屏幕 自从之前从海鲜市场淘到一些便宜好用的屏幕,现在一看到图形界面就来劲。这次就用一个50+20运费淘来的7寸屏搞个打地鼠游戏。 RGB接口,之前自行摸索了一番,搞清楚了引脚定义,画了个转接板,把触控也引出来了。
捡屏幕第一弹——5寸480x854 ST7701屏
这里面提到了还有一个7寸屏幕没有分享出来,今天就拉它出来遛遛。
(二)界面 素材直接从gitee上搬了这个老哥的程序;不过他是QT C++写的,除了图片之外没有其他可借鉴的地方:
图片来源
用gui-guider简单创建个框架 六个坑位用来打地鼠; 下面进度条用来控制地鼠冒头的速度; 把图片加进gui-guider直接生成位图,不需要自己操心矢量图的问题。
(三)动作 在gui-guider里增加两个event,一个是图片按下的event,一个是进度条调整的event; 从littlevgl_support里面把点击位置引出来,让锤子跟随点击走。
- static void screen_img_1event_handler(lv_obj_t * obj, lv_event_t event)
- {
- int i=0;
- lv_obj_t *pressImg;
- for(i=0; i<6; i++)
- {
- if(obj==g_imagePoint[i])
- {
- pressImg = g_imagePoint[i];
- break;
- }
- }
- if(i==6) return;
- switch (event)
- {
- case LV_EVENT_PRESSED:
- {
- if(g_isFlag[i]==1)
- lv_img_set_src(pressImg, &_beat_alpha_100x100);
- lv_img_set_src(g_screen_img_pg, &_chui_down_alpha_100x100);
- lv_obj_set_pos(g_screen_img_pg, g_touch_x-50, g_touch_y-50);
- // lv_obj_set_pos(g_screen_img_pg, last_x, last_y);
- }
- break;
- case LV_EVENT_RELEASED:
- {
- lv_img_set_src(g_screen_img_pg, &_chui_up_alpha_100x100);
- }
- break;
- default:
- break;
- }
- }
- static void screen_slider_1event_handler(lv_obj_t * obj, lv_event_t event)
- {
- switch (event)
- {
- case LV_EVENT_VALUE_CHANGED:
- {
- g_delay_time = lv_slider_get_value(obj);
- // printf("Value: %d\n", g_delay_time);
- }
- break;
- default:
- break;
- }
- }
- void events_init_screen(lv_ui *ui)
- {
- for(int i=0; i<6; i++)
- {
- lv_obj_set_event_cb(g_imagePoint[i], screen_img_1event_handler);
- }
- lv_obj_set_event_cb(ui->screen_slider_1, screen_slider_1event_handler);
- }
复制代码
(四)效果 在首先搞个仿真,在QT上把lv_game加进去,main函数里面设置初始化: - lv_ui guider_ui;
- setup_ui(&guider_ui);
- events_init_screen(&guider_ui);
复制代码
循环里: - int t_counter=0;
- while(1) {
- /* Periodically call the lv_task handler.
- * It could be done in a timer interrupt or an OS task too.*/
- lv_task_handler();
- usleep(5 * 1000);
- t_counter++;
- if(t_counter>=20*get_delay_time())
- {
- set_img();
- t_counter = 0;
- }
- }
复制代码
运行效果:
|