最近在處理圖片時出現了一個頗為嚴重的瓶頸。由於一個角色是由多個部份的圖片合成出來,在實時繪畫上,少不免會花上一點時間;而在我的 iPhone 2G 實機上測試出來的結果,才是令我頭痛的主要原因:
以下的結果是以「秒」為單位:
測試一:
》一張全畫面的 UIImageView 背景圖
》一張 UIImageView 標誌圖
》一個 UILabel 文字
所需時間:0.0003~0.0005 秒
測試二:
》一張全畫面的 UIImageView 背景圖
》一張 UIImageView 標誌圖
》一個 UILabel 文字
》建立一個及取消一個 Device Context(每幀)
所需時間:0.0016~0.0037 秒
測試三:
》一張全畫面的 UIImageView 背景圖
》一張 UIImageView 標誌圖
》一個 UILabel 文字
》建立一個及取消一個 Device Context(每幀)
》在 Device Context 上繪製圖片(每幀)
所需時間:0.7060~1.0885 秒
足足需要接近一秒的時間才完成!是一個極低的 Frame Rate。下一步要解決的是把這個部份加快至少 30 倍,確實是一個挑戰!
2009年11月6日星期五
2009年11月3日星期二
@selector in NSArray
除了之前學習到的 Class in NSArray 外,今日嘗試製作 Selector in NSArray。方法同樣很簡單:
- (void)runAllTest:(id)sender {
NSArray *menuList = [[NSArray alloc] initWithObjects:
@"testAttack:",
@"testForumla:",
@"testRun:",
@"testInitBattleModelStatus:",
nil];
NSString *currentTestName = [menuList objectAtIndex:currentTest];
[self addLog:[NSString stringWithFormat:@"[%@]...", currentTestName]];
// Get the selector of next test
SEL currentSelector = NSSelectorFromString(currentTestName);
int assertResult = (int)[self performSelector:currentSelector];
if (assertResult == 0) {[self addLog:@"OK\n"];}
else {[self addLog:[NSString stringWithFormat:@"ERROR %d\n", assertResult]];}
// Test complete
currentTest++;
// Stop if all tests have been ran
if (currentTest >= [menuList count]) {
[self stopTest:sender];
currentTest = 0;
return;
}
// Set timer for next test
timer = [NSTimer scheduledTimerWithTimeInterval:(0.5f) target:self selector:@selector(runAllTest:) userInfo:nil repeats:NO];
}
2009年11月1日星期日
2009年10月31日星期六
2009年10月30日星期五
2009年10月29日星期四
2009年10月22日星期四
XCode 小秘技(三)
2009年10月20日星期二
XCode 小秘技(二)
一直以來,我都有把 iPhone 專案內使用到的檔案以 Group 的方式分門別類;主要是方便管理及使用。但在編譯成為 IPA 後,原本按 Group 整整齊齊分類的檔案都會變得散亂地放在 IPA 內應用程式的根目錄。我一直都想解決這個問題!現在由我開發的角色扮演遊戲,已經包含上 2500 張圖片及資料檔案,更需要清清楚楚地分門別類。我嘗試了很多次都無法成功,也找不到類似的功能;最後發現,原來先在 Finder 建立起資料夾,把相應的檔案放進去,並把資料夾拖拉到 XCode 左方檔案清單的 Resources 內;這時會有一個視窗彈出,選擇 Create Folder References for any added folders 即可。而該資料夾的圖示亦會由正常 Group 分類的黃色,變成藍色。這樣編譯出來的 IPA 便會出現該資料夾及檔案。
2009年10月19日星期一
XCode 小秘技
2009年10月16日星期五
替 Function 換名
對於日漸壯大的代碼,有時會想到把某些功能函數換過一個更合適的名字,但考慮到在現時千絲萬縷的連結下,若利用 Search & Replace 的話,錯誤的風險會很高。原來在 XCode 下有著一個名為 Refactor 的功能,可以有效地處理以上問題。只要在功能函數上點選滑鼠右鍵,便會彈出如左圖般的選單。點選 Refactor 後輸入新的函數名稱,切記要輸入冒號!按 Preview 後會出現將要修改的地方,同時 Preview 按鈕也會變成 Apply 按鈕。其中 Snapshot 是打勾了,這個是備份功能,方便還原之用;但會把整個 Refactor 進程拖得很慢,我通常都會把它關掉!反正 Refactor 之後的代碼不會立即儲存。最後就是按 Apply 啦!
訂閱:
文章 (Atom)



