中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

從cpp-empty-test說起

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

創(chuàng)新互聯(lián)建站是一家專業(yè)提供仁布企業(yè)網(wǎng)站建設,專注與做網(wǎng)站、網(wǎng)站設計、html5、小程序制作等業(yè)務。10年已為仁布眾多企業(yè)、政府機構(gòu)等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進行中。


打開文件夾看到的是這個樣子的:

從cpp-empty-test說起

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


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

從cpp-empty-test說起

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


打開main.cpp看看:

從cpp-empty-test說起

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

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


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

從cpp-empty-test說起

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

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


扯遠了,再來說說jni,找google娘撒了會嬌,看到了這里: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下進行: 因為需要把C/C++編寫的代碼生成能在arm上運行的.so文件,這就需要用到交叉編譯環(huán)境,而交叉編譯需要在linux系統(tǒng)下才能完成?!?/p>

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


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


可是世界是辯證的,就在CISC這邊風景獨好的時候,RISC出現(xiàn)了,精簡指令集系統(tǒng),這群人認為CPU的指令集應該是越精簡越好,因為這意味著CPU做的事情都是非常簡單的,那么CPU從結(jié)構(gòu)上就可以設計的很簡單,從而能夠擁有更好的和其他硬件交互的能力,我的第一感覺是這幫人一定適合跟外星人交流,因為他們肯定能找到必然需要而且又最簡單的能夠表達絕大部分意義的語言。ARM,Advanced RISC Machines誕生了,ARM的誕生是歷史的必然,但是它只賣技術(shù)授權(quán),不自己做CPU倒是沒想到的,估計是沒有intel那種魄力和錢,純屬我猜測,當然可能更多的考慮是想搭建一個開放的架構(gòu),讓大家都可以設計自己的CPU,當然,這并不是說arm的CPU架構(gòu)就一定是精簡的,功能單一的,因為CPU核心確實是簡單,所以可以和其他芯片很容易的整合到一起,比如蘋果大名鼎鼎的A8芯片,提到蘋果,我突然想起個問題,既然蘋果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芯片也確實基本統(tǒng)治了移動平臺,在除了pc以外的各種設備上,更加常見的反而是arm芯片。我猜想這中間肯定有很多有趣的故事,于是乎找google娘問了下,果然很有趣,想知道的自己去問吧。


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

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


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

分享文章:從cpp-empty-test說起
標題鏈接:http://www.rwnh.cn/article22/pedojc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設、搜索引擎優(yōu)化網(wǎng)站設計公司、虛擬主機電子商務、建站公司

廣告

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

成都定制網(wǎng)站網(wǎng)頁設計
荥经县| 内黄县| 北川| 宁乡县| 镇坪县| 平原县| 阿拉善左旗| 锡林浩特市| 栾川县| 集贤县| 海丰县| 阜城县| 吉林市| 镇江市| 本溪市| 饶阳县| 大冶市| 永丰县| 钟山县| 高雄县| 永善县| 东城区| 萍乡市| 庆城县| 吉林省| 达孜县| 宜章县| 嘉祥县| 左贡县| 汨罗市| 阜南县| 南汇区| 宜州市| 信丰县| 闽清县| 民丰县| 墨江| 岐山县| 西乡县| 内丘县| 山阴县|