Recent Posts
Recent Comments
- sgwa 在 NSMutableArray應用:無限Sprite
- sgwa 在 NSMutableArray應用:無限Sprite
- sgwa 在 NSMutableArray應用:無限Sprite
- sgwa 在 NSMutableArray應用:無限Sprite
- bonjouryentinglai 在 NSMutableArray應用:無限Sprite
- Edden 在 NSMutableArray應用:無限Sprite
~我的iPhone程式筆記~

要開發iPhone應用程式,第一關要面對的就是mac專用的IDE開發工具:Xcode。就我目前使用的感想,除了沒有支援中文,以及偶爾會發生需要重開才能解決的小bug外,Xcode還算是一個稱職的開發環境。
所謂工欲善其事,必先利其器。對Xcode愈熟悉,在開發iPhone程式時也將愈有效率。以下就來介紹幾個我個人覺得很基本也很重要的小技巧。
1.Method自動補完
這是一個簡單實用的小功能。Objective-C是一個物件導向為主的程式語言,而物件離不開的就是一堆的方法或函式呼叫。有時候方法太多,指令太長,不是忘了正確的名稱就是名稱太長不想打字。這時候就可以利用Xcode內建的功能把對應的函式方法找出來,並自動填寫。
舉個例,在Cocos2d裡有個CCJumpTo的Class,但後面接什麼函式方法忘了,這時只要在要鍵入方法的地方按一下ESC鍵(要跟CCJumpTo空一格),Xcode就會跳出視窗讓你選擇。
用上下鍵選完所要的方法後,按下enter,Xcode就會自動幫你補齊,參數的地方也會提示所需填入的種類,還不錯吧!
2.分類函式方法列表
在Xcode的程式碼編輯視窗上方有兩個下拉選單,左邊選單是用來選擇現在要編輯的程式碼,右邊的選單則是顯示這個程式碼所擁有的函式。
如果這個程式不大,右邊的選單列是可以用來快速跳至對應的函式。
但是,如果程式很大,裡面的函式有幾十到上百個,要在茫茫函式裡找到你要的函式,那就需要一點功夫了。還好Xcode有個小功能可以幫你把這個列表再進一步的分類。
做個簡單的示範。以上圖來說,這個程式碼裡有五個函式,先在程式碼裡找到+scene函式,然後在它上面加入
#pragma mark -
#pragma mark init method
接著找到-dealloc函式,在上面加入
#pragma mark -
#pragma mark other method
好了以後存檔,再看一次列表就會看到表上多了兩行比較明顯的標記。
新手在看一些範例程式時,常會在程式碼裡看到#pragma的符號,主要的用途就是在這裡。在Xcode中#pragma後面的文字和符號不會被編譯,而是被用來顯示在函式列表用的,所以如果想惡搞的話….
3.管理Resources資料夾
最後一個要介紹的,是關於Resources資料夾的檔案管理。這對遊戲開發尤其重要。在一般書籍或網路的教學範例上(包含我寫的範例),如果遇到需要用圖或音效等多媒體檔案時,範例都會說,把檔案拖進Resources資料夾,然後選"Copy items into destination group’s folder"和"Recursively create groups for any added folders"。
如果專案小,多媒體檔案不多,這樣子做是沒什麼關係。但是開發遊戲時,不但圖檔多,音效檔也多,如果這堆檔案都照上面的做法去加到專案裡,在Finder下這堆檔案就會凌亂的被放在專案資料夾下,完全沒有組織,而且檔名相同的還不能重複出現(因為其實他們都在同一資料夾下)。有人會說Xcode裡有group功能可以把檔案分類,
嗯….老實說,這功能只限在Xcode有效。打開Finder到專案資料夾下看,檔案還是一團亂。到底該怎麼做才好?
想想實際在開發時的情形,美工人員會把圖檔分類後放到"Image"資料夾,音效人員會把一堆音效檔放到"Audio"資料夾。當我們拿到這兩個資料夾時,希望讓它照著資料夾結構放到專案裡。最前面的步驟和上述一樣,把整個資料夾拖到Resources資料夾下,但在跳出的詢問視窗,下方的"Recursively create groups for any added folders"要改成"Create Folder References for any added folders",如此一來,整個資料夾就會依照原本的結構階層進到專案資料夾內。(變成藍色的資料夾)
另外,如果想要有更好的檔案管理,在Finder上,應該把圖案、音效、程式碼完全獨立開來。當把圖案資料夾拖到Resources時,在詢問視窗上不要把copy items的欄位打勾。這樣子Xcode就只會把這個放圖案的資料夾當成連結,而不直接複製一份。這樣的好處是,這些有連結的多媒體資料夾平常就跟一般的資料夾一樣,有新的圖案或音效就用Finder往那裡丟。而當開啟Xcode專案的時候,那些新的檔案就會一併被更新。
不過採用上述方法管理resources的時候,要注意檔案路徑已經不同了。過去檔案是放在
[[NSBundle mainBundle] resourcePath]
但現在的路徑要改成
[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@“yourdir”]
才能找到對應的檔案。而過去為了方便而使用的
[UIImage ImageNamed:@“yourimage.png”];
也失效了。因為這個指令只會去找main bundle裡的檔案,子資料夾裡的檔案會找不到。所以要載入圖檔時,請使用
[[UIImage alloc] initWithContentsOfFile : @“yourpath”];
並填入完整的檔案路徑。
另外,不知道是mac os本身的問題還是Xcode的關係,用上述方法,有時新加入的檔案並沒有被Xcode認到。結果就是讀不到新加的檔案或者一直在用舊的圖檔。
遇到這種問題,可以先試著執行"Build"->"Clean All Targets"。然後在專案資料夾下把"build"資料夾刪除。還有問題,可以把Xcode quit掉,再重新啟動專案。如果嫌太麻煩,也可以考慮這裡的作法。原理很簡單,寫一個script,讓Xcode在編譯專案前,先refresh resources資料夾內容。這樣“照理說”新加入的檔案就會被認到了。(要手動也可以,在Xcode左欄找到新加入檔案的對應資料夾,按右鍵選"touch"即可)
以上小技巧,提供給大家參考。
十分好的小技巧~支持你繼續為大家提供好的文章!
寫得超詳細!
那個囧實在是太好笑了XD
寫的真好,多謝板主的分享~