2010年5月29日 星期六

iPhone Toolchain 3.0(二)


今天繼續嘗試,改為使用 LIFEBOOK 的 Cygwin 平台。根據 http://code.google.com/p/iphone-dev/wiki/Building 的指示來安裝,可是又一次失敗。

2010年5月28日 星期五

iPhone Toolchain 3.0


今日嘗試在 Mac 上安裝 Toolchain 3.0,可是失敗了。

2010年5月27日 星期四

iPhone 與 BlueTooth 模塊連線


今日嘗試把 iPhone 與 BlueTooth 模塊連線,可是 iPhone 卻找不到 BlueTooth 模塊,相信是因為模塊沒有 File Service 的緣故。

2010年5月24日 星期一

搜購機體鋁片


還有一個星期就要離開旺角辦公室,襯還在新填地街附近,今天走去搜購機體的材料。最終在新填地街頭近朗豪坊附近買了四尺鋁片。鋁片厚 1mm,闊 13mm,正正是我要的尺寸。價錢為 HK$4。

2010年5月23日 星期日

自動追蹤 Robot

最速!付属SH-2A基板で高性能マイコンを学ぼう


又到六月份了,Interface 一年一度的底板附送特刊又到了。今次付送的是 SH7262 底板。

詳情:http://www.kumikomi.net/interface/editors/2010/04/sh-2ainterface6.php

2010年5月22日 星期六

BlueTooth 測試(四)


今次把 BlueTooth 模塊直接連接 ATmega-128,然後用 LIFEBOOK + BlueTooth 手指控制 ATmega-128 主板。經測試後,發現用 115200 Baud rate 是無法連接成功,而 9600 Baud rate 就沒有問題。BlueTooth RX 要接 ATmega-128 TX,而 BlueTooth TX 要接 ATmega-128 RX。

iPhone & WiiMote

BlueTooth 測試(三)


終於能成功地把 BlueTooth 模塊跟 LIFEBOOK 的 Windows XP 連接。透過 Hyper Terminal 分別把 LIFEBOOK 的 COM5 及 BlueTooth 模塊的 RS232(COM8) 顯示。在 LIFEBOOK 發出指令,在 BlueTooth 模塊接收。實驗順利地進行。今次使用了 9600-8-N-1 設定,試過 38400-8-N-1 不成功。

稍後會把 BlueTooth 模塊連接 ATMega-128,用 LIFEBOOK 透過 BlueTooth 直接控制。這樣,硬件方面除了電源外,Servo 控制及遙控部份都已經沒有問題,只要建立好機體支架,便能運作。

本來我想透過 iPhone 的 BlueTooth 來控制機體,但我在這個領域的知識很少,需要再研究一下。

BlueTooth 測試(二)

昨天的 BlueTooth 測試之所以失敗,是因為 Mac 中的 BlueTooth 介面是用作檔案傳送;我所使用的 BlueTooth 模塊是不支援這個服務。正確的連接方法是:
1) 選擇「Set Up BlueTooth Device」

2) 選擇「Passcode Options...」

3) 輸入「1234」

4) 完成

2010年5月21日 星期五

BlueTooth 測試


今日用 BlueTooth 晶片做了一個測試。在 Mac Mini 上能找到晶片,可是試過很多方法都連接不上。

mini-CNC BLACK II 1510


這台就是我想購買的 mini-CNC BLACK II 1510。不過,最近認識了一位新朋友叫 Jeff,他的公司有一台荒廢了的 CNC,如可用的話,我就能節省 JPY$99,800~

2010年5月20日 星期四

網友 Keith 及 Arnold 的機械人訪問

http://www.ourradio.hk/web/index.php?option=com_content&view=article&id=1312%3A-2010519&catid=89%3Adigi&Itemid=110

又到續購 Robocon 的時候...


一年的時間過得真快!我的 Robocon 訂購又到尾聲,是時候續約了...。

七月份將會到秋葉原朝聖,現在正考慮是否購買 KHR-3HV,還是購買 mini-CNC BLACK II 1510...

2010年5月19日 星期三

Offscreen OpenGL Buffer

今天做了一個試驗,把 OpenGL 化的 UIView 生成後,做一次 layoutSubview 但不把它加進 window。出來的結果是能順利從圖片檔案讀取成為 Texture2D 物件。圖片沒有變為全白色。證明了只需要做一次綁定,便能借用 OpenGL 空間。不過,這招只適用於 UIView 下取得 OpenGL 圖案。

2010年5月18日 星期二

架構重整

「帝國 Online」已經提交到 AppStore,好快便能正式上架;但工作不代表告一段落。我打算用三天的時間重整「帝國」內部的架構,使得系統更加穩定及使修改更加方便。到目前為止,架構已經完成,剩餘的日子是把現時的系統改動,乎合新架構的格式,以及處理 OpenGL 圖片載入時的「白圖」問題。

2010年5月17日 星期一

量度字串的長度

CGSize stringSize = [string sizeWithFont:font];

2010年5月16日 星期日

UIScrollView Subclass 研究

今天研究了一下 UIScrollView Subclass 的處理方法。發現原來 drawRect 只在生成時才被呼叫;在拖動 UIScrollView 時,反而 drawRect 是沒有任何反應。這樣的結果是 UIScrollView 的畫面不會更新,但捲動棒則會有動畫顯示。要連帶內容一起拖動時,則需要加入 UIScrollViewDelegate 的 scrollViewDidScroll 事件,並在裡面呼叫 drawRect。

不過,另一個問題來了。不論是拖動到哪個位置,自行繪畫的部份都會固定在位置上。如果這不是想要的結果,那就需要在繪畫時加入 self.contentOffset.x 及 self.contentOffset.y。

2010年5月15日 星期六

Facebook Connect 空白錯誤

這幾天都在研究 iPhone 版的 Facebook Connect。我按著網上的影片教學,很快便能顯示出「登入」按鈕,及能真正登入。可是,當我想發佈訊息時,彈出要永 Permission 的視窗時便遇到錯折。如左圖顯示,畫面空白一遍,上方只顯示「錯誤」,根本不知道是甚麼錯誤;試了好幾個方法,問題仍然存在。後來的唯有逐行 Debug,才發現原來 Facebook 使用的 Session 給人清空了!

最後,原因是我在 UIView A 貼上 FBLoginButton,而登入後跳轉到 UIView B,UIView A 亦在這時 removeFromSuperview。FBLoginButton 也一起被清理了。所以到後來要求 Permission 時便發生錯誤。現在,我特別地為 FBLoginButton 做了一次 Retain,使得 UIView A 被清理時,FBLoginButton 仍能得以生存...。

2010年5月13日 星期四

關於 TARGET_IPHONE_SIMULATOR 及 TARGET_OS_IPHONE

在開發 iPhone 軟件的過程中,有時會用到一些功能是無法在模擬器內運作。之前在網上學到使用「TARGET_IPHONE_SIMULATOR」及「TARGET_OS_IPHONE」來分辨是「模擬器」還是「真機」。原來這個方法是錯誤的。真正的方法是:

#if (TARGET_IPHONE_SIMULATOR)
// Simulator
#endif

#if !(TARGET_IPHONE_SIMULATOR)
// Real device
#endif

2010年5月12日 星期三

Combine 2 UIImages

+ (UIImage*)combineImage:(UIImage *)hostImage image:(UIImage *)guessImage point:(CGPoint)point  {
UIImage *outputImage;
CGSize size;

size = image.size;
UIGraphicsBeginImageContext(size);

[hostImage drawAtPoint:CGPointMake(0, 0)];
[guessImage drawAtPoint:point];

outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return outputImage;
}

2010年5月11日 星期二

UIImage Masking

+ (UIImage *)maskImage:(UIImage *)image withMask:(UIImage *)maskImage  {
CGImageRef maskRef = maskImage.CGImage;

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);

CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
return [UIImage imageWithCGImage:masked];

}

2010年5月8日 星期六

iPhone Proximity Sensor

今日在看 iPhone SDK Document 的時候,發現了一個有趣的功能「Proximity Sensor」。它能偵測使用者是否接近 iPhone。基本上,這個就是平時通話時已在使用的功能。當把 iPhone 放到耳朵旁時,畫面是會關掉;相反則是打開的。

可能我體內是流著 Game Designer 的血,第一時間便思考如何在遊戲中使用。而最簡單的就是用在秘技方面。例如:在跟 NPC 對話時,如果使用者是否接近 iPhone 時,就會得到寶物,甚至乎是多了特別任務。這都是很容易實現的。

要使用「Proximity Sensor」,首先要啟動裝置:
UIDevice *device = [UIDevice currentDevice];
device.proximityMonitoringEnabled = YES;
if (device.proximityMonitoringEnabled == YES) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityChanged:) name:@"UIDeviceProximityStateDidChangeNotification" object:device];
}

- (void) proximityChanged:(NSNotification *)notification {
UIDevice *device = [notification object];
NSLog(@"Proximity state: %d", device.proximityState);
}

2010年5月4日 星期二

為 Icon 加上數字

有些時候,我們想令客戶留意到軟件的動態時,便會在 HOME 畫面的圖示旁加入數字或句子,以下是加入數字的方法:
[UIApplication sharedApplication].applicationIconBadgeNumber = 1;

2010年5月2日 星期日

格式化日子字串

在編程的過程中,有時會利用時間值來作為 Key 或作為記錄之用。以下是將當刻時間轉換為 NSString 的代碼:
 NSString *string;
NSDateFormatter *dateFormat;

// Example: 2010_4_16_11_49_53_296
dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy_M_d_h_m_s_FFF"];
string = [dateFormat stringFromDate:[NSDate date]];
[dateFormat release];