1.2 注意事項(xiàng)
我想到兩個(gè)對(duì)cocos2d開發(fā)者來說非常重要的問題,所以先在這里提一下。
1.2.1 Section 3.3.1
雖然“Section 3.3.1”這個(gè)名稱聽起來有點(diǎn)像是電影《星際旅行》里的某個(gè)秘密政府組織,但它實(shí)際上是蘋果公司的開發(fā)者許可協(xié)議中的一個(gè)章節(jié)。隨著iPhone SDK 4的發(fā)布,它已經(jīng)成為某新條款的代名詞。該條款或多或少地規(guī)定了開發(fā)者只可以使用 Objective-C、C、C++或JavaScript來進(jìn)行開發(fā)。由于對(duì)iOS開發(fā)所使用的編程語言加以限制,該條款一經(jīng)宣布便在iOS開發(fā)者中間引發(fā)了大量的討論和擔(dān)憂。
由于cocos2d完全是用Objective-C編寫而成的,而且其使用的外部函數(shù)庫,如Chipmunk和Box2D這兩個(gè)物理引擎分別是用C和C++編寫而成的,因此只要開發(fā)者是直接使用iPhone SDK提供的API,并且沒有使用任何私有API,cocos2d的使用者就不需要為這個(gè)新條款感到擔(dān)心。蘋果公司官方不會(huì)因?yàn)镾ection 3.3.1而否定用cocos2d開發(fā)出的游戲和應(yīng)用。
至于蘋果公司官方為什么要設(shè)立條款來限制編程語言并且杜絕“中間層”,大家普遍認(rèn)為這主要是為了防止用Adobe Flash開發(fā)出來的應(yīng)用和游戲在iOS市場(chǎng)占據(jù)太大份額。
1.2.2 平臺(tái)移植
也許你已經(jīng)注意到了,很多開發(fā)平臺(tái)上都有相應(yīng)版本的cocos2d引擎,其中包括Windows和Android。這些cocos2d引擎名稱相同,而且基本的開發(fā)原理也是一樣的,但它們是由不同的作者用不同的編程語言開發(fā)出來的,與iPhone版的cocos2d其實(shí)沒有關(guān)系。例如,Android版的cocos2d就是用Java編寫的(Java是Android設(shè)備的本地編程語言)。
如果你對(duì)平臺(tái)移植感興趣,想把游戲移植到其他平臺(tái)上,就必須了解這一點(diǎn):不同版本的cocos2d游戲引擎有著非常顯著的差異。比如說,要將一個(gè)用iPhone版cocos2d開發(fā)出的游戲移植到Android平臺(tái)就不是一件易事。首先,存在一些編程語言上的障礙,也就是說所有的Objective-C代碼必須用Java重寫一遍。重寫完以后,還需要把所有調(diào)用過的iPhone版cocos2d的API改成相應(yīng)的Android版本,并且保證你的代碼中不含有任何目標(biāo)平臺(tái)不支持的特性。另外,每個(gè)平臺(tái)都可能有自己不同的bug、不同的技術(shù)限制和挑戰(zhàn)。
總的來說,要將用cocos2d引擎編寫的iOS游戲移植到其他含有cocos2d游戲引擎的平臺(tái)上,所需要的工作量并不亞于把這個(gè)游戲在目標(biāo)平臺(tái)上用其他游戲引擎重寫一遍。也就是說,并不存在一個(gè)平臺(tái)轉(zhuǎn)換器,可以讓你輕輕一按就能萬事大吉。不同平臺(tái)上的cocos2d引擎唯一的相同之處僅在于名稱和基本工作原理相同,僅此而已。
1.3 本書讀者對(duì)象
我猜測(cè)你之所以挑選本書是因?yàn)樗臅四?。也許你是想為iPhone或iPad開發(fā)2D游戲,并且選擇了iPhone版cocos2d作為游戲引擎?;蛟S你并不在乎選用什么游戲引擎,而僅僅是想為iOS設(shè)備開發(fā)2D游戲。又或許你使用cocos2d已有一段時(shí)間,現(xiàn)在想深入理解它。不管出于什么原因選擇了本書,我保證你一定會(huì)有所收獲!
1.4 閱讀前提
幾乎每本編程書籍都要求讀者具備一些特定的知識(shí),其中有些是必須知道的,還有些是有助于理解但不是必需的。本書也不例外。
1.4.1 編程經(jīng)驗(yàn)
本書唯一的強(qiáng)制性要求就是你必須擁有一定程度的編程經(jīng)驗(yàn)。你必須對(duì)一些編程概念,諸如循環(huán)、函數(shù)和類等有所理解。如果你以前編寫過一些程序(要是使用過面向?qū)ο缶幊陶Z言就更好了),那么閱讀本書應(yīng)該沒有什么問題。
還準(zhǔn)備往下讀嗎?好樣的!
1.4.2 Objective-C
讀到這里就說明你一定有一些編程經(jīng)驗(yàn),不過你可能并沒有用Objective-C寫過程序吧?我承認(rèn),知道它的人并不太多。
其實(shí)不懂Objective-C也能讀這本書,但是如果你對(duì)這個(gè)語言的基礎(chǔ)知識(shí)有所理解的話,看起本書來就會(huì)輕松一些。假如你對(duì)其他面向?qū)ο蟮木幊陶Z言,比如C++、C#或Java有所理解,也許你在讀本書的過程中就能學(xué)會(huì)Objective-C。不過老實(shí)說,盡管我在學(xué)Objective-C之前有15年左右的編程經(jīng)驗(yàn),用過C++、C#以及各種各樣的腳本語言,但是,要通過這本書弄清楚Objective-C對(duì)我來說還是很難??倳?huì)有一些細(xì)小卻很麻煩的問題,讓人一下子想不明白,于是你在看學(xué)習(xí)cocos2d的時(shí)候就很難集中注意力了。所以,最好手邊常備一本Objective-C的參考書,不懂的時(shí)候可以隨時(shí)翻閱。
我在學(xué)習(xí)Objective-C的時(shí)候,讀的是由Mark Dalrymple和Scott Knaster寫的、由Apress出版社出版的Learn Objective-C on the Mac一書。這本書真的是極其有用,如果你想學(xué)習(xí)Objective-C和Xcode的話,那么我向你傾情推薦這本書。
另外,蘋果公司的官方文檔Introduction to the Objective-C Programming Language也是一份非常有價(jià)值的在線參考手冊(cè)。你可以到以下網(wǎng)址進(jìn)行閱讀:http://developer.apple.com/ mac/library/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html。
你可能覺得Objective-C有點(diǎn)嚇人:代碼中有很多方括號(hào)且內(nèi)存管理方式復(fù)雜,另外iPhone上竟然沒有垃圾回收機(jī)制!不必?fù)?dān)心!
Objective-C就像一件新潮的衣裳,僅僅是外表有些另類。它的一些基本編程概念,如循環(huán)、類、繼承和函數(shù)調(diào)用,還是和其他編程語言一樣的。不過,Objective-C中的術(shù)語和其他語言是有差別的,比如說,Objective-C開發(fā)者所說的““消息發(fā)送””實(shí)質(zhì)上就是指““方法調(diào)用””。至于內(nèi)存管理,cocos2d已經(jīng)為你盡量簡(jiǎn)化了這個(gè)過程,而且接下來我也將介紹一些比較基礎(chǔ)、比較容易的規(guī)則,你以后可以遵循這些規(guī)則來進(jìn)行開發(fā)。