2009年9月29日 星期二

關於 Build Configuration


為了方便測試遊戲中各個部份,我們習慣會建立一個 Unit Test 介面。這個 Unit Test 部份會在程式啟動時決定是否執行。原本是利用 #define UNIT_TEST true 的方式決定編譯的是正常版,還是測試版;但發現使用 Build Configuration 更為方便。我的做法是把 Debug Configuration 複製一份並命名為 Debug with Unit Test;再如圖所示,在 Preprocessor Macros 中定義 UNIT_TEST;這樣只要在代碼中使用 #ifdef 來分辨版本即可。

int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

#ifdef UNIT_TEST
int retVal = UIApplicationMain(argc, argv, nil, @"TestAppDelegate");
#else
int retVal = UIApplicationMain(argc, argv, nil, @"iPhoneAppDelegate");
#endif

[pool release];
return retVal;
}

2009年9月28日 星期一

iPhone 開發的隱藏開支(二)

最近收到了 Apple 的第二次匯款。今次的收入下降了不少,而匯款費用亦由 $60 下降至 $15。原先以為因為金額的不同,令到服務費亦有所下降;但向 Double-Sys 作者查證後,發現他的服務費亦只是 $15。翻查匯款收據後,發現第一次匯款是以 Telegrahic Transfer 方式處理;而今次的卻是 Interbank Fund Transfer。相信是處理方式不同,導至收費不同。問題是:由何人決定使用哪個方法呢?相信已經呼之欲出;但不論是誰,結帳都是我。Apple 這個角色真好賺!

2009年9月26日 星期六

Pivot


今天網遊時發現了一個軟件,對於遊戲製作,尤其是動作設計時十分適用。有興趣的網友可到 http://www.snapfiles.com/download/dlstickfigure.html 下載(Windows only)。

2009年9月25日 星期五

Quartz 學習記錄

這幾天專注於設計一個程序,去讀取公司遊戲中常用的 SPX 格式。當中包含了遊戲資料、切片數據及圖片數據,這是遊戲製作人很常用的組合方法。完成了讀取後,便需要按照數據把相關圖片中的切片繪畫出來。由於要繪畫整張圖片中的細部份,因此而要用上 Clipping 方法。今之的 Clipping 跟我之前處理 TravelHunt 遊戲內的時間軸的方法不同;那個應該說是 Masking 而不是 Clipping。

UIImage *image = [arrayImage objectAtIndex:0];
int png_width = image.size.width;
int png_height = image.size.height;

int x = 100;
int y = 100;
int width = 50;
int height = 50;

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL,
width, height, 8, (width<<2), colorSpace,
kCGImageAlphaPremultipliedFirst);

CGContextSaveGState(context);

CGRect clipRect = CGRectMake(0, 0, width, height);
CGContextClipToRect(context, clipRec);
CGRect drawRect = CGRectMake(-x, -(png_height-(height+y)),
png_width, png_height);

switch (framefrag.transform) {
case TRANSFORM_NONE:
transform = CGAffineTransformMake(1, 0, 0, 1, 0, 0);
break;

case TRANSFORM_MIRROR:
transform = CGAffineTransformMake(-1, 0, 0, -1, fw, 0);
break;

case TRANSFORM_MIRROR_180:
transform = CGAffineTransformMake(1, 0, 0, -1, 0, fh);
break;

case TRANSFORM_ROTATE_90:
transform = CGAffineTransformMake(0, -1, 1, 0, 0, fw);
break;

case TRANSFORM_ROTATE_180:
transform = CGAffineTransformMake(-1, 0, 0, -1, fw, fh);
break;

case TRANSFORM_ROTATE_270:
transform = CGAffineTransformMake(0, 1, -1, 0, fh, 0);
break;

case TRANSFORM_MIRROR_270:
transform = CGAffineTransformMake(0, -1, -1, 0, fh, fw);
break;

case TRANSFORM_MIRROR_90:
transform = CGAffineTransformMake(0, 1, 1, 0, 0, 0);
break;

default:
transform = CGAffineTransformMake(1, 0, 0, 1, 0, 0);
break;
}

CGContextConcatCTM(context, transform);
CGContextDrawImage(context, drawRect, image.CGImage);

CGContextRestoreGState(contextPart);
有一點要特別留意,Quartz 是採用 Painter’s model,意謂效果只會在設定後的繪畫動作才出現。所以 Transform 會先行出現,後面才 DrawImage。

2009年9月22日 星期二

Snow Leopard 真的快


昨天把公司的 MacBook 更新至 Snow Leopard 後,體驗到 Snow Leopard 的快感,而且原本在公司讀取不到的 Gmail 也能順利運作,是一個很好的升級。

2009年9月19日 星期六

Tour Album 上架


今次 Tour Album 的審批進程回歸正常,只需要八至九天便完成審批。之前 Sansu Law 出現的 23 天長審批,相信是 Apple 人員遺漏了而導致。事關當我在 15 天過後發電郵給他們查詢時,他們還就不能就個別軟件回覆審批狀況,不料 7 天後 Sansu Law 就能上架了。

http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=331099499&mt=8&s=143441

2009年9月15日 星期二

UIScrollView 下的拖拉問題


根據介面設計,由標題畫面跳轉到排行榜/遊戲等畫面,會使用拖拉方式。這個部份亦經已完成。但遇到的問題是在遊戲畫面下,亦同樣遇上 UIImageView 的拖拉功能,系統會先行處理 UIScrollView 的拖拉後才會處理 UIImageView 的。這樣便構成了問題,當玩家希望拖拉方塊時,卻形成了拖拉畫面。雖然 SDK 文件中交代過可以撰寫新的 touchesShouldBegin:withEvent:inContentView: 及 touchesShouldCancelInContentView:,情況卻只是稍為改善。在敏捷的拖拉動作下,仍然會把畫面拉倒。

對於這個問題,仍然在尋找合適的解決方案。

2009年9月12日 星期六

最新遊戲作品的 Ranking 畫面


這是最新遊戲作品的排行榜畫面。今次加入了 Online Ranking,數據是即時從伺服器下載;在模擬器及 iPhone 真機上試跑過,效果很滿意。

2009年9月11日 星期五

十字形 UIScrollView

在我最新的遊戲裡,其介面設計希望呈「十字形」,即是畫面可以蹤向拖拉之外,亦可以橫向拖拉。我分別把蹤及橫的 UIScrollView 加入 Superview,但出來的效果卻只有最後一個向的拖拉。

正確的方法是先建立橫向 UIScrollView 後,再建立蹤向 UIScrollView,並加入到橫向 UIScrollView 內。

2009年9月10日 星期四

Tour Album 審批進行中


Tour Album 原先的名稱是「Tour Book」。取這個名稱是一來想叨 Facebook 的光,二來裡面有 122 張照片,足以成為一本書。但這個原先沒有使用的名字,竟然在一個月後上傳時不能使用(原因就是有其他人搶先使用了咯!)。看來下次還是先下手為強,製作好 Icon 後便立即註冊,避免軟件開發完成後要再花時間換名換標題畫面。

這個軟件是利用「Sansu Law」的框架完成,並改為橫向版本。跟「Sansu Law」一樣,都是一個相片集軟件,用家可以把圖片儲存到 Photo Album 內作為壁紙之用。今次總共收錄了 122 張風景及寫實照片,有部份是不曾公開。希望這個軟件能為無業的我增加一點點收入。

2009年9月9日 星期三

「Sansu Law」上架了


我的第八個 iPhone 作品「Sansu Law」,經歷了 23 天的審批終於上架了。請大家多多支持。

2009年9月3日 星期四

今天失業了

我今天失業了。需要找下一份工作,但仍然想在遊戲界發展。

現在時間多了,會加速 iPhone 遊戲的開發,以及繼續把小機械人完成。