日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Qt编程之超级玛丽

發(fā)布時(shí)間:2023/12/29 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt编程之超级玛丽 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ?一年前在一個(gè)公眾號(hào)偶然看到了一些html游戲源碼,其中就有超級(jí)瑪麗的。用Webstrom打開(kāi)看了下,發(fā)現(xiàn)是別人打過(guò)包,格式化后發(fā)現(xiàn)代碼真的是晦澀難懂,后來(lái)又到github上去搜索,看能不能找到源代碼,github果然什么都有。找到了下面兩個(gè)倉(cāng)庫(kù),貌似是最完整的,而且也可以調(diào)試源代碼:

https://github.com/cflewis/Infinite-Mario-Bros

https://github.com/robertkleffner/mariohtml5.git

? ? ? ?用idea調(diào)試Java代碼簡(jiǎn)直就是方便得不得了。看完了代碼,又調(diào)試了代碼,發(fā)現(xiàn)代碼還是比較復(fù)雜的。大體的邏輯總算是搞清楚了,細(xì)節(jié)方面還是有些沒(méi)有去仔細(xì)琢磨。當(dāng)然了解這些就足夠了,接下來(lái)的工作就是把源代碼移植到C++平臺(tái)下來(lái)。

? ? ? ?移植的首要問(wèn)題是技術(shù)方案,到底是在Windows平臺(tái)下還是在Linux平臺(tái)下開(kāi)發(fā),到底是GDI還是GDI+,又或者是Irrlicht,Qt。關(guān)于這些我都一一嘗試過(guò),首先說(shuō)一下GDI和GDI+,這兩個(gè)東西貼出來(lái)的圖,圖片之間有明顯的分隔線,兩張圖片挨著貼在一起,給人的感覺(jué)看上去還是兩張。用Irrlicht和Qt就沒(méi)有這種問(wèn)題。但是用Irrlicht有個(gè)特效就沒(méi)辦法做出來(lái),比如像下面的:

? ? ? ?另外Irrlicht貌似也不支持圖片鏡像顯示,考慮到盡可能把所有的功能都移植過(guò)來(lái),所以最終選擇了Qt 。當(dāng)然Qt確實(shí)也是非常的強(qiáng)大。通過(guò)查閱其文檔,把所有的問(wèn)題都解決了。開(kāi)發(fā)工具是QtCreator 4.10.0,Qt版本是5.13.1,用的是ubuntu 18.04.4,g++ 7.5.0。

? ? ? ? 當(dāng)然,在移植的過(guò)程中也遇到了一些坑:

? ? ? ?(1)二維vector初始化的問(wèn)題,vector可以用assign賦初值,也可以先resize,然后再一個(gè)個(gè)循環(huán)遍歷來(lái)賦值。一開(kāi)始我是用assign賦值,結(jié)果程序有的時(shí)候會(huì)崩潰,也不是100%崩潰,后來(lái)上網(wǎng)查了一下,人家說(shuō)可能是編譯器問(wèn)題,所以就采用先resize然后再循環(huán)賦值。崩潰的問(wèn)題終于解決了。

? ? ? (2)游戲中的音樂(lè)播放問(wèn)題,由于Cocos2d-x開(kāi)源,所以參考了其源代碼,把SimpleAudioEngine那部分代碼移植過(guò)來(lái)了,SimpleAudioEngine在Linux下采用fmod來(lái)播放音頻文件,由于游戲采用MIDI音頻文件,代碼執(zhí)行到播放音頻文件那一步時(shí)居然提示報(bào)錯(cuò),說(shuō)什么沒(méi)有DSL文件沒(méi)有,后來(lái)也上網(wǎng)各種搜索,甚至想自己來(lái)制作MIDI音頻文件。最后,干脆下載了一個(gè)轉(zhuǎn)換工具,把這些音頻文件轉(zhuǎn)成mp3格式的。問(wèn)題也算是解決了。

? ? ? ?(3)游戲分辨率問(wèn)題,用Java開(kāi)發(fā)的那個(gè)是320 * 240的,而我用的是640 * 480的,所以很多數(shù)字都是原來(lái)項(xiàng)目?jī)杀洞笮?#xff0c;這些參數(shù)一旦搞錯(cuò),程序運(yùn)行就會(huì)有問(wèn)題,所以花了很長(zhǎng)時(shí)間調(diào)試,搞懂這些邏輯。

? ? ? ?移植工作實(shí)在周末空閑時(shí)間完成的,完全是照搬的代碼,沒(méi)法照搬的就去找Qt里面對(duì)應(yīng)的api來(lái)實(shí)現(xiàn),盡管如此,也有些收獲。前后斷斷續(xù)續(xù),從開(kāi)始到完成將近3個(gè)月的時(shí)間。一開(kāi)始看這個(gè)源代碼時(shí),感覺(jué)確實(shí)挺復(fù)雜的,隨著看的次數(shù)越來(lái)越多,覺(jué)得源代碼也沒(méi)這么難。不再那么畏懼了,信心也就上來(lái)了。原先的源代碼寫得很不規(guī)范,包括命名,重復(fù)代碼比較多,移植的也有這些問(wèn)題,當(dāng)然以后有時(shí)間的話,再重構(gòu),不過(guò)它這個(gè)設(shè)計(jì)思想比較好。

? ? ? ?最后,給一下github地址,有需要的可以拿去研究下。

? ? ? ?https://github.com/zxymd5/QtMario.git

?

總結(jié)

以上是生活随笔為你收集整理的Qt编程之超级玛丽的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。