資源描述:
《開發(fā)ms smartphone 游戲》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、開發(fā)MSSmartphone游戲 適用于: MicrosoftSmartphone2002軟件摘要 概要介紹MicrosoftSmartphone2002軟件的游戲開發(fā)并提供一些相關(guān)技巧。游戲市場(chǎng)概述 伴隨著新的Microsoft®obilePlay1,一個(gè)包含國際象棋、跳棋、紙牌、鋤大地、軍棋和黑白棋等多人游戲的在線游戲包XenGames(英文)InterstellarFlames,一款讓用戶駕駛戰(zhàn)斗機(jī)保衛(wèi)地球的動(dòng)作游戲TerraMobile-iobox(英文)Defender以及其他將具有無線功能的游戲 游戲開發(fā)工作和開發(fā)
2、出的游戲的質(zhì)量很大程度上取決于目標(biāo)平臺(tái)的性能以及可用的游戲引擎。除了Smartphone軟件開發(fā)工具包中的API以外,預(yù)計(jì)還會(huì)有以下游戲引擎可供使用: Fathammer的X-Forge三維游戲引擎(英文) Tao'sGroup的多媒體Java(J2MEMIDP)平臺(tái)(英文) AmigaAnyartphone用戶的引人入勝的游戲體驗(yàn)。編寫高效的游戲 為了深入了解如何編寫高效的游戲,我們請(qǐng)教了SvenMyhre。SvenMyhre是AmazingGames(英文)的CEO,同時(shí)也是一名游戲開發(fā)人員?! ∈殖衷O(shè)備用戶和開發(fā)人員中間普
3、遍存在一個(gè)錯(cuò)誤概念,即現(xiàn)在的ARM處理器與同一速度級(jí)別的Pentium處理器功能相當(dāng),但ARM處理器并未很好地體現(xiàn)出這一點(diǎn)。一個(gè)早期的Pentium處理器就可以勝過當(dāng)前基于ARM的所有Smartphone和PocketPC,這是由處理器自身及其支持系統(tǒng)決定的?! entium處理器具有超標(biāo)量體系結(jié)構(gòu)(能夠在一個(gè)時(shí)鐘周期內(nèi)執(zhí)行多條指令),有五個(gè)并行執(zhí)行單元和一個(gè)集成的浮點(diǎn)運(yùn)算單元。一般情況下,大多數(shù)以Pentium處理器為核心構(gòu)建的PC都有一個(gè)內(nèi)部L1緩存和一個(gè)大型外部L2緩存?! ‘?dāng)前基于ARM的Hz、16位的總線最多只能為33-MHz的AR
4、M處理器提供足夠的代碼指令以使其保持全速運(yùn)行,這其中還不包括您需要處理的數(shù)據(jù)。為了解決這個(gè)問題,大多數(shù)ARM處理器都包含一個(gè)指令緩存和一個(gè)數(shù)據(jù)緩存,通常這兩個(gè)緩存的大小均為8Kb,有些大的可以達(dá)到32Kb。只要緩存中出現(xiàn)請(qǐng)求的代碼指令或數(shù)據(jù),CPU就能以全速直接從緩存中獲得它們,而不必經(jīng)過緩慢的內(nèi)存總線。而一旦需要訪問尚未加載到緩存中的代碼和數(shù)據(jù),您就會(huì)切換回<33MHz(假定總線為66MHz、16位)的速度。實(shí)際上,將一個(gè)132MHzARM處理器的速度降低為2MHz是相當(dāng)容易的。只需要采用一種效率非常低的方式來組織數(shù)據(jù),使緩存失去作用就
5、可以實(shí)現(xiàn)這個(gè)目的?! 〖幢闶沁@樣,也比您使用錯(cuò)誤數(shù)據(jù)類型和低效率編碼的工作速度要快。執(zhí)行大量除法運(yùn)算,或者濫用浮點(diǎn)數(shù)據(jù)類型,將使CPU為達(dá)到每秒20萬條代碼指令的速度而筋疲力竭。內(nèi)存訪問和帶寬 Smartphone可以配備各種基于ARM的處理器,每一種處理器的內(nèi)存訪問開銷都不同。但可以肯定的是,由于緩存容量太小、存儲(chǔ)總線速度太慢,因此您無法忽略這個(gè)問題?! ”热?,您的處理器運(yùn)行速度為132MHz,內(nèi)存總線為16位、運(yùn)行速度為66MHz。每次讀取一個(gè)尚未到達(dá)處理器緩存中的字節(jié)時(shí),處理器都要先填充一整條緩存線。一條緩存線可能是16個(gè)字(在ARM體
6、系結(jié)構(gòu)中,一個(gè)字相當(dāng)于32位或4字節(jié)),也就是說一條緩存線為16*4=64字節(jié)。由于您的內(nèi)存總線是16位的,因此在操作結(jié)束之前它將被占用32個(gè)周期,而且更糟的是,由于總線運(yùn)行的速度只有處理器的一半,所以處理器將在您獲得請(qǐng)求的一個(gè)字節(jié)之前延遲64個(gè)周期。因此,要確保值得花時(shí)間去等待填充緩存線。同樣,還要確保您的內(nèi)存盡可能緊密,同時(shí)還要檢查內(nèi)存訪問模式,以判斷是否可以調(diào)整結(jié)構(gòu)以使運(yùn)行效率更高。如果您需要定期訪問某一結(jié)構(gòu)中的一個(gè)數(shù)據(jù)成員并要處理大量這樣的結(jié)構(gòu),則請(qǐng)您考慮將這個(gè)特殊的數(shù)據(jù)成員移到它自己的數(shù)組中?! 』谕瑯拥脑颍瑧?yīng)該盡可能使用字節(jié)(8
7、位)或雙字節(jié)(16位),這是因?yàn)锳RM處理器在從內(nèi)存到寄存器加載信息的過程中,可以將無符號(hào)和有符號(hào)的字節(jié)和雙字節(jié)擴(kuò)展為字。不過,在將有符號(hào)值從寄存器存儲(chǔ)到字節(jié)或雙字節(jié)的內(nèi)存位置時(shí),編譯器將生成兩條額外的移位指令,以確保即使由于寄存器中的值過大而無法保存在指定的內(nèi)存位置,該值也能保留其符號(hào)位。在ARM上,其中一條移位指令可能不需要任何系統(tǒng)開銷(幾乎每一條常規(guī)指令都可以與一條移位指令配對(duì)),這取決于編譯器的效率。這是您在處理內(nèi)部循環(huán)時(shí)應(yīng)該了解的一條信息。每次使用單字節(jié)或雙字節(jié)的變量時(shí),都要確保盡可能使用無符號(hào)的數(shù)據(jù)類型。內(nèi)存管理器 您可能已經(jīng)對(duì)此
8、有所了解,但是一般的內(nèi)存管理器和函數(shù),如malloc、realloc和nealloc的一種包裝),速度都很慢。您通常需要預(yù)先分配所需的全部?jī)?nèi)存,并使用