從cpp-empty-test說起-創(chuàng)新互聯(lián)

cpp-empty-test是cocos2dx3.2自帶的一個(gè)c++的最簡單的例子,基本也是使用使用C++開發(fā)cocos2dx3.2程序的工程模板。在開始拆析游戲模塊之前,讓我來看看這個(gè)簡單的工程有些什么。

創(chuàng)新互聯(lián)公司專注于獲嘉網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供獲嘉營銷型網(wǎng)站建設(shè),獲嘉網(wǎng)站制作、獲嘉網(wǎng)頁設(shè)計(jì)、獲嘉網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務(wù),打造獲嘉網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供獲嘉網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

打開文件夾看到的是這個(gè)樣子的:

從cpp-empty-test說起

把以 proj 開頭的文件夾除開后,其實(shí)只剩下 Classes 文件夾和 Resources 文件夾,那個(gè)json文件其實(shí)是一個(gè)配置說明,打開看看就知道它不過是記錄了在不同平臺(tái)下的工程文件的路徑啊、target名字啊等,那個(gè)CMakeLists.txt文件是為了使用CMake這個(gè)工具的,至于這個(gè)工具是什么,它跟make有什么關(guān)系,可以看看這里:http://blog.csdn.net/u012150179/article/details/17852273


根據(jù)經(jīng)驗(yàn),我知道那些proj開頭的文件夾都是各個(gè)平臺(tái)下的編譯工程,誰叫cocos2dx是跨平臺(tái)的呢。我們的游戲會(huì)支持android平臺(tái),但是開發(fā)我還是得在windows平臺(tái)下開發(fā),所以我先看看windows平臺(tái)的工程吧,打開之后看到的是這樣的:

從cpp-empty-test說起

突然發(fā)現(xiàn)除了上面 Classes 文件夾下的5個(gè)文件外,還多了main.h和main.cpp,這兩個(gè)文件被放在了 proj.win32 文件夾下面,略一思考也就明白了,畢竟是要針對(duì)不同平臺(tái),那么入口函數(shù)必然不同,所以在各個(gè)不同的工程文件夾下估計(jì)都會(huì)放著各自的程序入口的代碼,在windows平臺(tái)下是這個(gè)main.cpp。這么看來cocos2dx的代碼還是不錯(cuò)的,跟游戲相關(guān)的代碼是通用的,都放在Classes文件夾下,不用針對(duì)不同平臺(tái)編寫不同的代碼,這也就是說cocos2dx跨平臺(tái)的含義吧。但是畢竟各個(gè)平臺(tái)有區(qū)別,這有區(qū)分的代碼就放在各自的工程目錄下,這里我們的empty-test沒有多余的內(nèi)容,所以只需要一個(gè)程序入口代碼就OK了。由此可以猜想,coocs2dx的引擎代碼里肯定有很多#if windows啊,#if ios之類的條件編譯,而引擎需要引用其他的功能時(shí),肯定也是盡量使用那些跨平臺(tái)的庫,當(dāng)然,那些庫里肯定也是一堆的#if windows條件編譯,另一個(gè)辦法是引擎代碼直接根據(jù)不同的平臺(tái)來引用那些不同平臺(tái)下的庫。


打開main.cpp看看:

從cpp-empty-test說起

意外的簡單,一個(gè)標(biāo)準(zhǔn)的windows平臺(tái)入口main函數(shù),真正有用的代碼其實(shí)就是那個(gè)return,創(chuàng)建了AppDelegate類之后調(diào)用了run函數(shù)。目測這樣游戲就跑起來了。

再打開main里面引用的Classes文件夾下的 AppDelegate.h文件,可以看到 AppDelegate類是繼承自libcocos2d庫的Application類的。當(dāng)然,我應(yīng)該繼續(xù)追下去,不過這里就打住吧,我今天只是想打一壺醬油。那么大致明白了,AppDelegate類里面應(yīng)該是創(chuàng)建了一個(gè)導(dǎo)演然后跑起來后面的helloscene的場景,至于到底干了什么今天就不看了。


本來醬油已經(jīng)打滿了,可以回家炒番茄了,但天性好奇的我又打開了android工程,想看看android這個(gè)google推出的傳說中的系統(tǒng)的一個(gè)程序的工程目錄是啥樣子的,于是我看到了這些:

從cpp-empty-test說起

除開readme不談,那里面其實(shí)講的都是廢話,我喜歡從腳本看起,簡單看了下ndkgdb.sh,從名字就差不多知道它一定是用gdb來調(diào)試,至于前面的ndk,我還是知道點(diǎn)的,用ndk可以把C/C++代碼編譯成so庫,總之這個(gè)腳本目測是用來調(diào)試的。

接下去就是各種配置文件了,無論是xml還是json還是txt,還是高大上的properties、project、classpath都是配置,至于這些配置到底是被誰用,那需要去找google娘。然后我把目光放到了那三個(gè)文件夾,res文件夾看了看發(fā)現(xiàn)比較簡單,里面就是各種不同屏幕大小下的app的圖標(biāo),再來看src里面只有一個(gè)java文件,目測這個(gè)java的作用應(yīng)該和windows下的main.cpp的作用類似。然后只剩那個(gè)神奇的jni文件夾了。我本人由于最開始受到國內(nèi)那弱弱的計(jì)算機(jī)科學(xué)教育體系的影響,第一門語言學(xué)的是c,然后我就討厭c++和java了,我不知道其他的受弱弱的大學(xué)教育的影響一開始學(xué)的是c的人,是不是跟我一樣,從那以后就討厭java了,甚至討厭一切面向?qū)ο笳Z言,即使之后當(dāng)我明白了面向?qū)ο笾皇且环N編程思想后,我還是討厭面向?qū)ο笳Z言,冏!


扯遠(yuǎn)了,再來說說jni,找google娘撒了會(huì)嬌,看到了這里:http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html,還有這里:http://docs.anysdk.com/JNITutorial。

本來到此為止,我就該回家吃飯了的。但是我看到了anysdk里開發(fā)環(huán)境搭建的第一句話“1.android的NDK開發(fā)需要在linux下進(jìn)行: 因?yàn)樾枰袰/C++編寫的代碼生成能在arm上運(yùn)行的.so文件,這就需要用到交叉編譯環(huán)境,而交叉編譯需要在linux系統(tǒng)下才能完成?!?/p>

天殺的,我突然極其想吐槽,為毛我寫的代碼需要經(jīng)過這么多波折才能在android平臺(tái)下運(yùn)行,難道windows大法不好嗎?于是我又補(bǔ)了點(diǎn)考試常考的知識(shí)。ARM平臺(tái)和大多數(shù)pc運(yùn)行的X86平臺(tái),到底有何區(qū)別。


這一切都要?dú)w結(jié)到信仰的不同,哇擦,居然都上升到信仰的高度了,話說我一開始其實(shí)真的是來打醬油的。在很久很久以前,其實(shí)也沒有多久,有些人認(rèn)為CPU的指令集是越復(fù)雜越好,因?yàn)檫@樣意味著CPU可以非常方便而直接的干一些事情,比如如果指令集里面只有加法指令,那么在做乘法的時(shí)候,只能不停的去加才能實(shí)現(xiàn),但是如果真有一條直接做乘法的指令,那么執(zhí)行起來必然是很快的,這里不要吐槽我,我只是舉個(gè)栗子,CPU里當(dāng)然不會(huì)有乘法器,因?yàn)橛枚M(jìn)制,所以乘法有很多優(yōu)化方式,這里不談。但是,這種想法有點(diǎn)像我們寫代碼的時(shí)候,給一個(gè)類添加了一些功能,但是有些功能可能用不到,為了盡可能讓我們的類看起來強(qiáng)大,我們會(huì)提供盡可能多的接口來滿足用戶,那么我們就需要導(dǎo)出更多的接口。所以復(fù)雜指令集CISC架構(gòu)的CPU越做越復(fù)雜,當(dāng)然,性能也是越強(qiáng)大,這里的性能是指運(yùn)行速度,我們常聽說的intel就是CISC得死忠。我們可以看到intel已經(jīng)在各個(gè)計(jì)算機(jī)芯片領(lǐng)域都強(qiáng)大到讓人一眼望不穿的地步,幾乎統(tǒng)治了整個(gè)PC機(jī)市場,當(dāng)然這和他們跟微軟合作分不開,而且由于intel的這種常年統(tǒng)治,導(dǎo)致大量開發(fā)者開發(fā)的軟件其實(shí)都是基于這個(gè)架構(gòu),也就是所謂的X86架構(gòu)來開發(fā)軟件,為什么叫X86,這么羞羞的問題你問google娘去??!intel也是一家偉大的公司,他們不斷創(chuàng)新,增加他們的指令集,不斷采用新的制程,什么65納米、55納米、45納米,什么奔騰、安騰、酷睿、至強(qiáng)巴拉巴拉的,2GHZ、3GHZ、4GHZ,單核、雙核、四核、八核!噢,叼!更叼的是intel經(jīng)過這么多年,架構(gòu)的兼容性做的真心是好,要不是各個(gè)操作系統(tǒng)懶得寫那么復(fù)雜,30年前的程序甚至都可以跑在今天的系統(tǒng)上。


可是世界是辯證的,就在CISC這邊風(fēng)景獨(dú)好的時(shí)候,RISC出現(xiàn)了,精簡指令集系統(tǒng),這群人認(rèn)為CPU的指令集應(yīng)該是越精簡越好,因?yàn)檫@意味著CPU做的事情都是非常簡單的,那么CPU從結(jié)構(gòu)上就可以設(shè)計(jì)的很簡單,從而能夠擁有更好的和其他硬件交互的能力,我的第一感覺是這幫人一定適合跟外星人交流,因?yàn)樗麄兛隙苷业奖厝恍枰矣肿詈唵蔚哪軌虮磉_(dá)絕大部分意義的語言。ARM,Advanced RISC Machines誕生了,ARM的誕生是歷史的必然,但是它只賣技術(shù)授權(quán),不自己做CPU倒是沒想到的,估計(jì)是沒有intel那種魄力和錢,純屬我猜測,當(dāng)然可能更多的考慮是想搭建一個(gè)開放的架構(gòu),讓大家都可以設(shè)計(jì)自己的CPU,當(dāng)然,這并不是說arm的CPU架構(gòu)就一定是精簡的,功能單一的,因?yàn)镃PU核心確實(shí)是簡單,所以可以和其他芯片很容易的整合到一起,比如蘋果大名鼎鼎的A8芯片,提到蘋果,我突然想起個(gè)問題,既然蘋果ios系統(tǒng)用的是自己研發(fā)的基于arm架構(gòu)的A8芯片,那mac呢?難道也是用的A8,如果不是的話,豈不是蘋果自己的兩套系統(tǒng)用著兩種不同的CPU,于是我去官網(wǎng)上看了下:

從cpp-empty-test說起

iphone6用的A8無誤,再看看mac吧:

從cpp-empty-test說起

赤裸裸的intel i7處理器啊。。淚奔,果然是這樣。順帶再吐槽下蘋果中文官網(wǎng)的廣告語“豈止于大”。然后我想了想,好像只有高通和蘋果兩家現(xiàn)在還在做arm芯片比較有名,但arm芯片也確實(shí)基本統(tǒng)治了移動(dòng)平臺(tái),在除了pc以外的各種設(shè)備上,更加常見的反而是arm芯片。我猜想這中間肯定有很多有趣的故事,于是乎找google娘問了下,果然很有趣,想知道的自己去問吧。


終于要說到android了,google娘出的基于arm架構(gòu)開發(fā)的操作系統(tǒng),在現(xiàn)在各種新興的設(shè)備上,什么手機(jī)、手環(huán)、電視、手表、眼鏡、頭盔等各種可穿戴設(shè)備上,基本是arm+android的搭配。經(jīng)過上面的分析,我們知道RISC設(shè)計(jì)的CPU肯定要比CISC要簡單,那么性能上,也就是運(yùn)行頻率一般是趕不上CISC設(shè)計(jì)的CPU的,在制作工藝上估計(jì)也趕不上intel這種積累了幾十年專注于這么一件事情上,而且無論從兼容性還是硬件可擴(kuò)展性、軟件開發(fā)的方便上以及可用工具的豐富層度上來說,肯定依然是趕不上intel的。那么為什么我們還能看到arm+android統(tǒng)治市場呢?思來想去,我看看了以前蘋果發(fā)布的文章,才終于想到,原來是功耗的差異,我們可以看到CISC架構(gòu)的追求方向非常明確,就是性能,所以我們看到intel各種推陳出新,一代更比一代強(qiáng),CPU核心頻率動(dòng)不動(dòng)就3,4GHZ,而我們看一般我們手機(jī)CPU的頻率,即使是最新款的手機(jī)差不多也就1GHZ多的樣子,完全不是對(duì)手,但是由于CISC架構(gòu)CPU這種追求,導(dǎo)致它的功耗也自然更高,我記得我的電腦電源是有350W的,但是我手機(jī)肯定沒這么高的功率,所以要在我手機(jī)上跑這么個(gè)高帥富,我自己都不信,但是跑一個(gè)只需求幾十W的arm芯片,我還是可以認(rèn)同的。在電池能源這么緊張的設(shè)備上,跑個(gè)1GHZ的芯片,我都覺得每天一充電抓狂,更何況讓我跑個(gè)3GHZ的芯片,吃一頓飯充一次。順帶提一點(diǎn),linux也是基于arm架構(gòu)開發(fā)的系統(tǒng),真心是一直等到google娘開發(fā)出android,才讓linux大展宏圖啊。

我必須要回家吃飯了,已經(jīng)餓昏了。天下大事,分久必合,合久必分。目測未來arm芯片肯定是朝著性能方向發(fā)展,intel芯片肯定是朝低功耗方向努力。


以上純屬YY,若有不對(duì)的地方不用告訴我了,我真的是出來打醬油的,有篇文章寫的不錯(cuò),可以看看:http://ihyperwin.iteye.com/blog/1701132

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:從cpp-empty-test說起-創(chuàng)新互聯(lián)
本文URL:http://www.muchs.cn/article24/dsogce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、ChatGPT服務(wù)器托管、App開發(fā)、網(wǎng)站排名全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司