娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32自制GUI小游戲

發(fā)布者:SereneHeart最新更新時(shí)間:2025-03-11 來源: jianshu關(guān)鍵字:STM32 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

一,前言

要過年了,我就玩會吧~GUI之前學(xué)習(xí)過了guilite源碼,那么我就調(diào)用它的API自己做個(gè)小游戲玩玩。步驟是先在vs上完成調(diào)試,然后移植到stm32F4開發(fā)板上。主要也想多用用新買的并口LCD屏,因?yàn)橹暗膇li9325并口8bit連camera不能用DMA,我又買了個(gè)ili9431并口16bit屏幕(連接camera方便DMA直接采集賦值),因?yàn)?bit的話,16bit需要先傳高bit再傳低bit給LCD。而camera DMA是4個(gè)字節(jié)按低地址到高地址寫到LCD,這樣就導(dǎo)致8bit LCD無法通過DMA連接camera了。跑題了,我順便述說我的新屏幕,哈哈~先看下游戲效果圖吧!其實(shí)可以理解為一個(gè)超級瑪麗小游戲。


image.png

二,vs調(diào)試遇到的問題

我是官網(wǎng)的example基礎(chǔ)上,借用它圖及走路,跳躍的邏輯代碼,然后改成了按鍵可以觸發(fā)的小游戲。想想容易,結(jié)果過程中也遇到了些坎坷。
1. 文字更新,無法消去之前的。--已解決
rect在surface創(chuàng)建的時(shí)候范圍需要填寫正確。然后通過調(diào)用s_surface->show_layer來顯示level0層的內(nèi)容,進(jìn)行恢復(fù)。
2. 如何設(shè)計(jì)重玩。--已解決
做了些標(biāo)志位,然后重玩需要調(diào)用reset函數(shù)來重置位置。
3. 背景圖片移動(dòng)不知道用哪個(gè)API或設(shè)計(jì)方案。--未解決
現(xiàn)在也沒找到解決方法,guilite庫好像不支持圖片移動(dòng)的API。它的移動(dòng)物體要么是重繪,要么就是要預(yù)先準(zhǔn)備好一張張圖片。這個(gè)我去之后有機(jī)會再看看其它GUI源碼是如何做的。否則三維立方體確實(shí)是有移動(dòng)的,但是這個(gè)移動(dòng)只是幾條線段的移動(dòng)。我這個(gè)背景圖片數(shù)組很大,難道也要通過矩陣變換數(shù)學(xué)公式來實(shí)現(xiàn)移動(dòng)?

三,STM32GUI調(diào)試問題

1. cpp函數(shù)中按鈕按下后的回調(diào)函數(shù)總是找不到。導(dǎo)致編譯不通過。
原因是UIcode.cpp是cpp文件不是c文件,所以c要引用c++的函數(shù)需要添加extern c。主要是忘記了它是cpp文件,哈哈~
2. 代碼一運(yùn)行就進(jìn)入了while循環(huán)。
因?yàn)橛?層,在底層set_surface的時(shí)候到calloc出現(xiàn)assert error進(jìn)入while死循環(huán)。查了下我設(shè)置了2403202=150K,而STM32F407雖然有192Kram,但是其中64K不是連續(xù)的。于是我縮小了尺寸,挑選要更新的界面區(qū)域。大概為48K吧,但是依然calloc出錯(cuò)?
于是思考了下calloc申請堆空間出錯(cuò)只有一種原因,就是內(nèi)存不過,但是現(xiàn)在48K為什么會不夠呢!想起來HEAP段的大小可以設(shè)置的,估計(jì)設(shè)置小了,查了map文件果然,HEAP默認(rèn)只分配了512字節(jié)。

    HEAP                                     0x20001b58   Section      512  startup_stm32f40_41xxx.o(HEAP)
   Heap_Mem                                 0x20001b58   Data         512  startup_stm32f40_41xxx.o(HEAP)
   STACK                                    0x20001d58   Section     1024  startup_stm32f40_41xxx.o(STACK)
   Stack_Mem                                0x20001d58   Data        1024  startup_stm32f40_41xxx.o(STACK)

原因找到了,那么就修改Heap段配置大小,修改startup_stm32f40_41xxx.s
Heap_Size EQU 0x00000200改成Heap_Size EQU 0x00010000
3. object走路速度快。
也就是刷屏變換比vs2017工程中快,所以把delay50變100。這樣調(diào)試下速度差不多。
4. 跳一下后,key數(shù)值每次加2
防抖動(dòng)從5改成10.估計(jì)我一次按下抖動(dòng)了2次,所以認(rèn)為按下2次。修改為10后,按一次key,跳一次數(shù)值加1。一切如預(yù)期。

四,總結(jié)

Every thing under control. What a wonderful day!
游戲使用方法

  1. 開機(jī)

  2. 按一下key0,游戲開始,主人公出現(xiàn)。

  3. 在游戲過程中按key0,主人公跳起,必要碰到4個(gè)障礙物。

  4. 跳過4個(gè)障礙物后,顯示win結(jié)束游戲,按一次key0又可以重來。

  5. 過程中若遇到障礙物,則顯示GO。游戲結(jié)束,按一次key0又可以重來。

游戲錄制效果

2.gif


關(guān)鍵字:STM32 引用地址:STM32自制GUI小游戲

上一篇:玩玩littlevgl移植到stm32
下一篇:qemu stm32特制版源碼編譯及調(diào)試

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 溆浦县| 平遥县| 泗洪县| 石家庄市| 射洪县| 永丰县| 盘锦市| 灵川县| 宁陕县| 江津市| 图木舒克市| 涿鹿县| 石狮市| 青神县| 陕西省| 安西县| 绥滨县| 余干县| 龙江县| 大厂| 邮箱| 福海县| SHOW| 保定市| 沧州市| 奎屯市| 葵青区| 泸西县| 得荣县| 浦县| 庆元县| 辽阳县| 碌曲县| 泸西县| 平邑县| 和政县| 沙坪坝区| 汉川市| 会昌县| 湟源县| 栾川县|