2010年12月30日 星期四

iTunes Backup 路徑

今天把 iPad 升級到 iOS 4.2,但我的 Mac Mini 沒有空間,於是我把過往的 Backup 檔刪掉,竟然能騰空 14GB 的空間,實在驚人。Backup 檔存在於 /Library/Application Support/MobileSync/Backup

2010年12月24日 星期五

Robocon 73


世事真奇妙,今早心血來潮到 Ohmsha 網頁一看,發現有新一期 Robocon;回到家時,竟發現最一期已經到達。今期雜誌封面的機械人相當古怪,原來是第 18 回 Robo-one 的優勝機械人,真是奇妙。看到這些機體,不禁使我想起已經有一段長時間沒有接觸機體相關的開發...。

2010年12月17日 星期五

藍芽測試


今天,我的大女兒發燒,已經是連續第二天發燒,從星期日第一次發燒到今天,六日內發了三天燒,所以我特別請假照顧她。

就在今天的可調用時段中,我嘗試了 BlueTooth 連線。原來製作方法十分簡單。我把它製作成 BlueToothManager,方便調用:

//
// BlueToothManager.m
// Main
//
// Created by Pacess HO on 17/12/2010.
// Copyright 2010 Pacess. All rights reserved.
//

#import "MainViewController.h"
#import "BlueToothManager.h"
#import "HPNotification.h"

@implementation BlueToothManager

static BlueToothManager *sharedManager = nil;
static id parentDelegate = nil;

- (id)init {
self = [super init];

if (self == nil) {return nil;}

return self;
}

- (void)dealloc {
[super dealloc];
}

- (void)connect {
peerPickerController = [[GKPeerPickerController alloc] init];
peerPickerController.delegate = self;
peerPickerController.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
[peerPickerController show];
}

- (void)disconnect {
[blueToothSession disconnectFromAllPeers];
[blueToothSession release];
blueToothSession = nil;
}

- (void)sendData:(NSData *)data {
if (blueToothSession == nil) {return;}

[blueToothSession sendDataToAllPeers:data withDataMode:GKSendDataReliable error:nil];
}

- (void)peerPickerControllerDidCancel:(GKPeerPickerController *)picker {
picker.delegate = nil;
[picker autorelease];
}

- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session {
blueToothSession = [session retain];
session.delegate = self;
[session setDataReceiveHandler:self withContext:nil];

picker.delegate = nil;
[picker dismiss];
[picker autorelease];
}

- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state {
switch (state) {
case GKPeerStateConnected:
[HPNotification postNotificationCode:NOTIFICATION_BLUETOOTH_CONNECTED object:nil delegate:parentDelegate];
break;

case GKPeerStateDisconnected:
[HPNotification postNotificationCode:NOTIFICATION_BLUETOOTH_DISCONNECTED object:nil delegate:parentDelegate];
[blueToothSession release];
blueToothSession = nil;
break;
}
}

- (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session context:(void *)context {
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[HPNotification postNotificationCode:NOTIFICATION_BLUETOOTH_DATA_ARRIVED object:string delegate:parentDelegate];
}

+ (void)connect:(id )delegate {
if (sharedManager == nil) {
sharedManager = [[BlueToothManager alloc] init];
}
parentDelegate = delegate;
[sharedManager connect];
}

+ (void)disconnect {
[sharedManager disconnect];
}

+ (void)sendData:(NSData *)data {
[sharedManager sendData:data];
}

@end
暫時只處理兩機連線,至於四機連線,日後有時間再研究。我在 iPhone, iPhone 4, iPad 上測試,發現 iPhone iOS 3.1.3 並不支援這個連線,而 iPhone 4 及 iPad 則連線無誤。

2010年12月11日 星期六

不受 Status Bar 的影響

如果想在 App 內避免其他 ViewController 召喚 Status Bar 而受到影響的話,可以在 ViewController 內設定:
self.wantsFullScreenLayout = YES;

2010年12月9日 星期四

動畫中的動畫

我小組「Perception Studio」的第二個作品將會是一個解謎遊戲。名稱暫訂為「Adnap」。在今個作品中,我們希望呈現出細膩流暢的動畫,以吸引玩家們的注意。要達到如此目的,動畫的幀數一定不能少。但對於三合一版本及在 20MB 的限制下,是絕對不可能。如果以部件併合的方式製作動畫,相信問題能得到解決。我們唯有改變方式,把 Sprite 系統升級並支援「Animation of Animation」。好處是令到動畫不會太過「死板」而又能節省空間。舉例來說:現在要製作角色的等候動作。包含了呼吸及合眼動作。如果以全幀來演譯,至少要 8 幀。但問題來了,合眼的時間跟呼吸的動作會很規律;要是想做得好一點,便可能需要用上 40 幀。對於記憶體及儲存空間都是一個負荷,而且這裡只是一個動作,要是 30 個動作時,問題會呈幾何級數上升;對於製作人來說也不是好事。

而「Animation of Animation」的概念是把某些部份分開成個別動畫,以我們的例子,眼睛便可以獨立出來,只要 3 幀便能有很好的效果。至於呼吸動作,8 幀也很好。動畫可以各自有不同的時間設定。總數 11 幀便能組合出彈性,看起來不「死板」的動畫。

2010年12月3日 星期五

35 顆一星

今天用 AppSales Mobile 來看所有 AppStore 中玩家們對《銀行大亨》的評價。得出來的數據是有 35 顆一星,是一個相對失禮的數字,亦打擊了我的信心。雖然當中有大部份都是不幸因 SDK 4.2 而導致 iOS 3.1.3 的啟動問題;蹤使在開發時特別有在 iOS 3.1.3 上進行測試,但最終有這樣的結果,實在是極大的疏忽。不過,連 Apple 也沒有發現啟動問題,令我意識到 Apple 已沒有花時間在 iOS 3.x 上了;同時地,亦令我驚訝世上還有很多 iOS 3.x 的 iPhone。

在《銀行大亨》的開發上,我下了不少功夫,務求令遊戲比《帝國》穩定,Bug 比《帝國》少,遊戲性比《帝國》高。客觀來說,前兩項已經做到,至於最後那項,我個人亦比較喜歡《銀行大亨》。

結果是,很多玩家認為《銀行大亨》只是一個沒技術的 Drag & Drop 遊戲、玩法沉悶。其實當初有考慮過在每個服務點加入小遊戲,但我們小組認為「小遊戲」會導致「沉悶」的感覺,因而把方向設定為「手忙腳亂」的挑戰。現在,玩家們狠狠地打了我一下,說明了「小遊戲」是他們認為必須的部份,反而「手忙腳亂」對他們來說是得不到樂趣...。多謝這 35 顆一星。

2010年12月1日 星期三

AR Sample Code

今日找到了一個關於 AR 的 Sample Code。在我的 iPhone 3.1.3 上執行也不慢,算是接受到的程度。原來用官方 SDK 都能做 AR,很有興趣試試。

http://dl.dropbox.com/u/508075/augmented_reality/AugmentedRealitySample.zip
http://cmgresearch.blogspot.com/2010/10/augmented-reality-on-iphone-with-ios40.html