2009年12月31日 星期四

Pacess 的科學構想(二):時空穿梭機

一直以來都有很多人爭議的時空穿梭問題,在我的判斷來說是沒有可能發生。但不可能發生的只是讓人回到當下的真實時空;假若是虛擬的就沒有問題。由於電腦的運算速度越來越快,有日便能計算(Render)指定時間指定地點的環境出來,到時加上 Virtual Reality 技術,便能使人回到過去及未來。可能有人會發現當中有一個矛盾,就是電腦運算中無法連電腦自己也包括在內,至少不能超越自己。所以,運算的方式是宏觀的,就像中國博大精深的術數一樣,計算出一個範疇之後,再以旁枝推敲,以求出答案。

2009年12月30日 星期三

EXC_BAD_ACCESS - NSZombie

又學到新技巧了!今天遇到關於記憶體的問題,遊戲在載入地圖時,差不多有 70% 會死機。在 Debug 模式下找不到問題所在,當中的物件 pointer 沒有異樣。於是我打開了 Guard Malloc 來檢測 Memory out of bound 的情況,結果亦沒有這些錯誤發生!在毫無頭緒之下,我唯有上網搜索有用的技巧,竟給我發現了 Zombi 方法,親身試過十分好用,能加快找到錯誤的成因。

在 XCode 左邊欄位 Groups & Files 下有個 Executables 分類,入面放著現時 Project 的名稱,點擊滑鼠右鍵並選擇 Get Info。在彈出視窗中選 Arguments 後,再在 Variables to be set in environment 下方點擊「+」。名稱輸入 NSZombieEnabled,數值輸入 YES,還要記得打前方的勾。這樣就行了!

每當有物件建立時,Zombie 都會自動建立,而遇上物件 Release 過龍時,便會觸及 Zombie 及發生中斷。透過 Log、停頓的位置及 Call Stack 便能進一步了解發生錯誤的原因。

2009年12月29日 星期二

在 OpenGL ES 下生成貼圖的發現

今日在移植的工作上又有新發現!按照元祖版本的設計,系統會建立一條新的綫程把圖檔載入,以減輕對遊戲在運行速度上的拖延。我在移植的過程中會盡量保留原先的設計,以方便日後兩個版本一併升級及除錯。可是問題來了!iPhone 版本在使用 OpenGL 的環境下,把圖檔讀進成為圖像的過程中是需要 glBindTexture;而在這個動作的之前及之後,也需要做一些設置上的處理。由於綫程只負責把圖檔載入,所以根本不會做以上的設置,導致所載入的圖案都變成全白。起初我還以為是流程上或數據上發生錯誤所導致,結果花了兩個多小時的追蹤也找不到原因;後來換個思考角度,再透過小實驗才找出問題是緣於 OpenGL 設置。

這樣說,綫程豈不是失去其意義?要解決問題豈不是要作出重大改動?正如先前所說,為了方便升級及除錯,我只好把綫程斷開,但維持綫程內的架構,並把綫程原有的工作進入點置入主流程之內。結果問題得以順利解決。

2009年12月28日 星期一

Pacess 的科學構想(一):元素分解及合成裝置

自小我已經渴望成為一個發明家。當時普遍人應為發明家等如科學家;但在我的腦海裡,發明家是較科學家高級很多。科學家只是有科學知識的人;而發明家不單止要有科學知識,更重要的是要有創意及毅力。

回顧我在少年時代(12-23)已經有很多科學方面的構想,可惜時值讀書時間,也沒有金錢發知識把構想變成現實。在眾多的構想中,很一些已經被其他人成功開發;有一些則在開發中;還有一些是未被開發。能想出如此多的構想,主要是從生活觀察中得來;還有的就可能是當時我在行用神大運,才有這股創意;現在的我已經無法想得到了。

其中一個構想是「元素分解及合成裝置」。它的設計就像一個小型房間,在運作時能發出電光射向房中心的物件,並使它分解成元素。在分解的同時會把所有元素的位置記錄。元素還會分類儲存在容器內,就像打印機的墨匣一樣。炭元素容器、氧元素容器、氫元素容器...等。

同時間,這台裝置亦能透過容器內的元素,加上元素位置記錄,把物體還原。相像一下這台機器還有甚麼用?若果把機器設在中國及美國,配合足夠的元素匣及通訊裝置,便能實電瞬間轉移了!當然也能實現複製物件!而且也很環保呢!

2009年12月27日 星期日

RPG 開發回顧

充實的時間是過得特別快!轉眼已經回歸 GameisLive 三個月!原本預計三個月便能完成的移植工作,到現時為止卻只有 40% 左右的完成度,真是超出估計很多。在這三個月裡,平均每天都加班 1.5 小時,理應不致落後太多。

若要總結當下經驗的話,我認為自己的 iPhone 開發知識不足;先是使用 UIView 來製作,導致後來繒畫速度上出現瓶頸,因而要花時間學習並改用 OpenGL ES。不過只花數天便完成改動,我是十分滿意。

第二是低估了遊戲的複雜程度。基本上,這個手機上的 MMORPG 遊戲的規模是很大,比我在 U1 時的《小鬥士大冒險》的規模還要大,真的不能因為手機遊戲而低估。下次還是使用網友 Tony 的建議,用源碼總行數來估計移植所需要的時間。

第三是原編程人員寫 Code 的方式很隨意,一不小心便能鑄成大錯,更有很多隱藏的陷阱。我一直都嘗試理解原編程人員的思考方式,可惜我那根深蒂固的寫作及思考方式完全是一個障礙;很多時候都需要遂行追蹤才能理解程序在做甚麼,往往花費很多時間。

現在,較大的部份已差不多完成,連線也沒有問題,之後便是主力做介面及戰鬥系統;再加上有新同事幫忙,相信能加快開發進程,在農曆新年前完成封測版本。順帶一提,我的所屬公司正聘請兩位 iPhone 編程人員,有興趣的網友可把履歷電郵到 hrcn@gameislive.com。無 iPhone 開發經驗者優先考慮!

2009年12月26日 星期六

讀取 Info.plist 中的數據

有些時候,我們會把一些資料數據放到 Info.plist 中。要讀取的話,可使用以下語法:
NSString *myName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"My name"];

2009年12月24日 星期四

2009年12月18日 星期五

Apple Magic Mouse

上星期訂購的 Apple Magic Mouse 終於都到了!加上上星期的 Apple Wireless Keyboard,我可以在這天寒地凍的天氣下,竄入被窩中繼續玩電腦!Yeah!

2009年12月12日 星期六

Renew iPhone Developer Program

今日收到 Apple 的來信,邀請繼續參加 iPhone Developer Program。正如我的估計一樣,要是合約期滿,我在 AppStore 的所有作品都會自動下架。這對於我來說未嘗是一件好事。由於現時的工作都是開發 iPhone 軟件,在事件上有所抵觸;二來是我在美國及歐洲以外地區的收入,可以來一個了結,反正現時我不可以推出新作品,這些地方的收入都很難滿足 US$150 的要求。不過,距離我的合約到期日(情人節)還有一段時間,可以仔細考慮一下。

2009年12月11日 星期五

iPhone 個人化撥號 Icon

在我的電話通話次數入面,有 90% 都是打給我的太太,為了方便起見,我特別做了一個「速撥 Icon」,只要輕鬆一按,便會立即至電我的太太,十分方便。這個功能十分好用,可惜只能適用於 JailBreak 手機。

不過,我學習了一個方法,可以不需要經過 Apple 的審批,而用正途安裝到 iPhone 上面。

i-KeyHole TV

今日從朋友的 Facebook 得知有個名為「i-KeyHole TV」的 iPhone 軟件,可以即時收看來自日本地區的電視節目,我當然第一時間搜尋這個軟件!測試過這個軟件,雖然流暢度不高,但能在街上隨時收看日本電視節目,都咪話唔爽!

這個軟件沒有在 AppStore 發售,因此,只有 JailBreak 的裝置才能享受箇中樂趣。真不禁要喊一句:「JailBreak unleashed the POWER!」

2009年12月10日 星期四

自家 App 製成 IPA 方法(二)

之前介紹過的方法只能利用 Installous 安裝,程序比較複雜;今次要講介的則方便得多,只需要用 iTunes 同步便可。


01)建立 IPA 資料夾

02)在 IPA 資料夾內建立 Payload 資料夾

03)把編譯好的 .app 拷到 Payload 內

04)利用 BBEdit 打開 .app 資料夾內的 info.plist 檔

05)在 </dict> 之前加入以下句子並儲存:

    <key>SignerIdentity</key>

    <string>Apple iPhone OS Application Signing</string>

06)把本來要上傳到 iTunes Connect 的 512x512 JPG 放到 IPA 資料夾

07)把 JPG 檔改名為 iTunesArtwork

08)把 Payload 及 iTunesArtwork 壓縮成 ZIP 檔

09)把 Payload.zip 改名為 Cracked.ipa

10)把 Cracked.ipa 拖拉到 iTunes 的 Applications 內

11)同步!