轉自51.comphp
這是一個毫無編程經驗的「菜鳥」在成長爲 iOS 遊戲開發者後,總結的成長史。短短6個月間,他從 Python 入門,發展到給 Mac 開發小遊戲,再到自學 Objective-C 和 Cocos2d。除了你可能已經讀過無數次的勵志元素,文中的書籍、網站推薦以及開發過程當中的經驗教訓總結很值得打算或剛剛進入蘋果開發領域的新人一看。node
我是菜鳥python
幾乎恰好是6個月前,我決定開始從事一項新的職業。2010年10月以前,我從未接觸過編程。要說有,那也只是在6年級時學過了大概一週的很是基 本、基本、基本的編程知識。就這些。我不知會學成什麼樣。2010年10月9日我在微博上寫道:「我究竟想幹嘛?我決定學習編程,我沒有任何的基礎。唉, 兄弟們,我有些擔憂。」這是一段生涯的開始,我很高興能走上這條路。我不會回頭。編程
開端數組
我將只快速簡單的給大家講一下我前幾個月的學習過程,由於這段時間很是的枯燥。我從Invent with Python這本書開始,這是一本對新手來講很是不錯的教程。爲了讓大家知道它是如何的初級,我向大家展現這本書裏的一段話:app
+ 這個符號是來告訴計算機把2和2相加。作減法用這個符號 -,作乘法用星號(*)。框架
在我學會了一些很是基本的知識後,我隨意的作了不少文本形式的小遊戲,好比劊子手,jotto,猜數字。個人第一個比較大一點的小玩意叫作「大齒怪」。這個遊戲的情景是關於一個大齒怪(就把它想成一個怪物吧),禍害村裏。它藏在什麼地方,你須要去猜它在哪:iphone
也就是在此時我收到了個人第一張珍貴的粉絲畫的做品。我把這個遊戲發佈在了Reddit上,Michael Hussinger爲它製做了這張使人驚歎的封面畫:學習
接下來,我轉移到了個人第一個半圖形遊戲:」掃雷「。在此時我纔開始真正的理解構造一個靈活的遊戲引擎有多麼的重要(沒錯,就像我開發的這個遊戲引 擎)。這個遊戲仍然是文本形式的,但已經有至關的靈活度了,在這個遊戲裏,我能夠指定佈景的大小和地雷的數量。這樣一來遊戲就能夠從頭再玩,你能夠把地雷 數量設置很小而很快能看到遊戲的結果,這樣有趣多了。下面就是這個遊戲:測試
歡迎使用蘋果iOS
此時,我已經感受到應該轉向真正的圖形遊戲了。我感受陷入了僵局。我根本不知道從哪裏入手。我研究了一下SDL,這個東西超過了個人接受能力,我很快放棄了。由於我知道最終我想作iPhone應用程序,我請教了Matt Rix (Trainyard),他給了我一些很好的建議。他建議我從學C語言開始,而後學Objective-C,而後Cocos2d。今天提及這些我很快高興,這三種語言我都學會了,雖然很基礎。
在學習C和Obj-C時,我遇到的大量的挫折,我沒有作出多少遊戲。不少次,我真的懷疑是否能渡過難關、找到出路。不少東西當我第一次看到時愁得我撓掉了不少頭髮:結構體,數組,多維數組,屬性,表現層,控制層,協議和代理,內存管理,還有不少。不少東西我目前仍然沒法理解領會。可是我堅持繼續下去,我對不少人都說:讓本身進步的惟一方法就是不斷的作遊戲。我十分清楚,想成爲鋼琴家,練習時根本,因此,這也是我須要的(我就持續這樣下去)。
歡迎使用Cocos2d
一旦我最終把iPhone應用的基本知識攻克下,我當即開始研究Cocos2d。我很緊張,也很興奮。如今,我不知道本身是太挑剔仍是太笨,我感受 Cocos2d的文檔寫的不太好。全部的類,方法,屬性都列出來了,但卻很難讓人讀懂,它們解釋的不太清楚。一個例子:每一個」node「(Cocos2d 的主要元素)都有一個」(BOOL) isRunning「屬性。看起來很是的簡單,但它彷佛可以表示任何意思。全部的文檔對這個屬性的解釋都是:」標誌這個node是否在運行。嗯,ok … 不用說,Cocos2d裏面有不少東西我都十分的困惑。
儘管這些的不滿,我仍是很是喜歡Cocos2d。一旦掌握了一些基本知識,我就開始研究它如何可以容易的作出一個簡單遊戲,讓它立刻能跑起來。我已經知道了如何作音樂和聲效,我還知道一些Photoshop,我就真的開始要讓它輸出一些很酷的結果了。起初我對Cocos2d很困惑,我從Ray Wenderlich的一些很是棒的教材開始學習。
我開發的各類暫且算是遊戲的遊戲
下面的是個人第一個Cocos2d遊戲,它是我直接按照Ray的教材開發出來的(我在裏面還加上了個人音樂和當一個敵人被消滅時的很傻的音效!):
接着,我仿製了一個Pong。這個遊戲還能夠多人蔘與:
Pong以後,我受到了鼓舞,決定開發Tetris。這是個巨大的錯誤。我根本沒有準備好。我遇到了各類讓人懊惱的錯誤和問題,當我最終把框架搭起來後,我在微博上寫了這樣的話:「我很驕傲。我爲個人Tetris仿品開發了一個真正複雜的類/子類系統。」Noel Llopis很快的告訴我,說個人決定十分的錯誤。我搜集了一些教材,試圖好好的修改一下這個仿Tetris遊戲,但太困難了。我決定放棄,但有一天我會戰勝你的,Tetris!
此次Tetris失敗的嘗試以後,我受Tilt to Live的啓發作了一個遊戲初始原型,我計劃在這個遊戲裏,你須要去收集紅點來獲取積分,而不是像其它遊戲裏去避開它們。如今作的這個裏面並無加入真正的遊戲裏面會有的音樂:
學習了更多的Cocos2d以後,我忽然來了靈感要作一個循環的褶皺紙樣式的背景。因而把一張紙作出褶皺型,以循環方式填充背景。而後我在上面放了 一個小圓片,你能夠用加速器讓它在上面滾動。當我弄明白如何讓這個小圓片滾動後,我爲本身能作出這個東西很自豪,由於這牽涉的一些數學知識,我並無用很 久的時間就把它能明白了(儘管只是一個很簡單的幾何問題)。背景很難看 —— 但很好用:
接着,當我看到了即將發佈的遊戲Bumpy Road的使人驚訝的海報後,我受啓發,心想是否可以也作一個跟裏面的高高低低的路面類似風格的遊戲元素。很顯然,個人作圖水平頗有限,你能夠比較一下。
Bumpy Road:
個人版本:
這以後,我想在真正的動畫上試試身手。之前從沒有作過動畫,先在Photoshop試試。人物的製做很乏味冗長。即便是畫一條很傻很短的線條也很費 勁。但我仍是完成了,我把他稱做「狂歡者」。他能作的就是一遍遍的張開和閉上他的大嘴,每次都隨機的發出一些哼哼聲。你還能夠在屏幕上移動他。背景閃動不 同的顏色。當你觸碰屏幕時,他只能哼哼和張嘴:
然而,「狂歡者」有了一小隊粉絲。這些粉絲的頭像圖標裏包括Mario, Link, Samus,等等。事實上我把這個遊戲發給了Touch Arcade的Jared(嘿,是他向我要的)。以後,讓我大吃一驚和無比高興的是,Retro Dreamer的Craig Sharpe創做了個人第二張正規的粉絲的藝術做品!下面就是Craig爲「狂歡者」創做的傑做:
他的做品是如此的優秀,我甚至把它放入了個人下一個遊戲裏。但起初,我突發奇想,要作一個跳杆子的遊戲。起初的出發點只是爲了使用一個簡單的遊戲技 術測試一下視差背景的效果,但作下來就作成了這個遊戲。最終的遊戲有一個小屏幕,有記分功能,有重玩功能,有音樂、音效,各類跳躍高杆,有一個高度指示 器,甚至還有一個鳴謝頁面!它是個人功能最全的一個遊戲。我在遊戲裏畫了一些很是醜陋的精靈,就像你下面看到的:
由於畫的太差,我詢問Michael Hussinger是否願意爲我作一些簡單的修改,他贊成了!他在二十分鐘內就畫出來一個讓人驚歎的匹薩夥計。我估計花幾個小時也畫不出這麼好的做品來。他還爲遊戲中的視差效果畫了一個漂亮的山做爲背景。下面的就是在他的幫助下游戲的樣子,我加上了標題和鳴謝頁:
遊戲運行中!
個人下一個遊戲受Trainyard的啓發。我想看看是否能作出 一個地圖,上面畫些網格道路,卡車能跑在上面。看看,製做「狂歡者」有了很好的回報。因此我稱這個爲「狂歡大巴」。遊戲的玩法就是點擊地圖上的一個地方就 設定一個聚會點(一個閃爍的,顏色變換的點,伴有音樂),而後圖上會畫出一條路,通向這個點,「狂歡者」會把他的「狂歡大巴」開到那裏。不用說,這是一個 很是簡單的遊戲。但裏面很酷的東西是,當他到達目標地點後,音樂聲會變大,卡車會開始跳舞,Craig畫的做品會出如今開車上面左右搖擺!
代碼寫的很亂,有不少問題。我讓弟弟試玩了一下,他式了三次,什麼都沒幹成,他老是每次都是在錯誤的時間點擊到錯誤的地方,這樣遊戲根本就不能正常 玩下去。每次我都要從頭開始玩這個遊戲,由於我沒有給它加入「從新開始」的功能。但我仍是挺爲這個Trainyard的複製品感到自豪的。Matt應該爲 此感謝我。
個人下一個項目是要作一條蛇。我發現了這個如何用flash作出一條蛇, 我只須要把它移植到iPhone上。這個教材讓我明白了不少如何作這種遊戲的內幕。以前,我計劃讓蛇每一幀移動一次,但在如何讓蛇尾和蛇身保持一致的問題 上遇到了不少的麻煩。我本打算建一個數組存全部歷史動做,蛇尾將按照這個數組裏的信息作它的每一個動做,但這樣一來它動的太快,讓人很不舒服。這個教程整個 顛倒了個人思惟,我意識到蛇其實根本沒有動。這種看起來在移動的視覺效果實際上是簡單的在幀上添加和移去一小段蛇身產生的。這樣,當你撿起一 個蘋果,所須要作的只是告訴程序不要刪除任何片斷。事實上我須要從新寫這個程序,由於界面太難看了,控制的也很差。由於我是移植過來的,代碼寫的很亂。但 事實上做爲一個基本的遊戲來,它仍是很不錯的!
在完成這條蛇以後,我打算製做「狂歡大巴2」:「狂歡者」的週末狂歡。我把上一版升級了一些。我在裏面加入了一些Trainyard裏面的速度條, 一個車站,車能夠從裏面開車,一些聲音特效(當他被碰着時會出現很大的汽車相撞的聲音,並且會喊出「今天沒有活動!」),程序也整理的更整潔了。但沒多 久,程序又開始變亂,當我要糾正一個問題時,另一個東西又出現了問題。最大的問題是當我把速度設成最大時,卡車會在路上某個點崩潰。這是由於更新調用的 太頻繁,程序來不及在下一次調用前更新完。儘管我知道這個問題的緣由,如想修復這個問題須要重作大量的東西。我想我須要升級到「狂歡大巴3」:最後的狂歡。
我最近的目標是重作Doodle Jump。目前爲止一切進展順利。裏面不少小平臺,移動速度會約來越快,一個會跳的小人,一些其它物品(目前爲止只有一個彈簧),自定義音樂和聲效,以及徹底從原做裏拷貝的背景。目前爲止我對作出的東西很高興。我會繼續往裏面增長不少的東西。
結論
練習給人帶來的進步是驚人的。每次當寫出一個新程序,我都會遇到大量的沒法預知的問題和bug。當遇到挫折時,我通常是將問題移到下一次升級時解決。這讓我感受本身就在走一個while循環:
我會一直這樣製做下去,一轉眼就到如今了,我幾乎等不及想知道再6個月後會是什麼樣。請下次當我來述說如何給Casey’s Contraptions製做音樂(和一些聲音)時,請記住必定來看看!