2014年2月20日 星期四

《半路叛逃》閱讀心得

這本書應該是歸類在「商業行銷」類別,不是言情或勵志小說,但是我卻看到哭了出來......
不是因為裡面有什麼感人的故事情節,而是作者半路有太多的動機跟觀點都句句戳中了我。
作者在遊戲公司中任職多年,沒日沒夜的辛勞,卻付出在自己不認同的專案上。 這點,相信在許多大體制的公司中都有相同的情況,不管是因為內部政治的鬥爭、管理階層的決策判斷、公司發展方向等等的「人為限制」,我們往往做著違背自己理念的事情。 我們知道我們不是機器人,所以提出了自我意志,勇敢說不,但是一旦上述的人為限制壓迫下來,仍舊只能照作,因為你只是「員工」,大體制下的小螺絲釘。 在這樣的惡性循環之下,所有的理想跟熱情早就灰飛煙滅,最討厭聽到的話也變成了從上層丟下來的:

上層:「你的熱情呢?你做的這個東西我看不到你的熱情。」
您沒看到嗎?大概是因為......您正踩著呀?!

每當遇到這種情況,真的是滿腦子裡都像有一群網友不斷地丟著:「快點閃人吧!」「把辭職信丟在他臉上」「你怎麼還在那?」的跑馬燈不斷地閃過,數量之多,都已經快模糊了視線,掩蓋掉理智。但是作者沒有因此衝動的離開,而是開始挪出下班時間,嘗試開發出自己的潛能 ─ 獨立開發者的能力,有過經驗與自信之後,才很有Guts的提出了辭呈。

「為什麼要離職?」
「因為我想要做遊戲。」
「你現在不就是在作遊戲嗎?」
「我想做,我想做的遊戲。」

這是我在一開始被這本書強烈吸引的最大因素,強烈的熱情與理想,就在這裡引爆開了,離開與放下,就是最好的新開始!!當初提離職,也是有這樣有點像鬼打牆一般的對話,但是也因為這樣,你會更確信所處的環境是一個泥沼,你需要更努力地撐起來,離開它,踏上堅實的平面,你才能前行。

《半路叛逃》這本書是作者從最初決定成為獨立開發者製作遊戲相關app之後的經驗傳承,不管成功與不成功的專案,完整地分享了各個經驗所獲得的寶貴Know-how。我認為不論是否是製作遊戲app,這本書的內容都能提醒我們各個階段要注意的事情,更重要的是,感染作者的熱情,這是做任何事,要快樂要成功的最大要件 ─ 熱情。

相信各位熱血志士們在看了此書之後,內心也跟我一樣澎湃不已!
(應該不是因為當時我正在播著學友哥的音樂吧?!不然我怎麼會流淚呢! T_T ) 
________________________________________________ 
書名:《半路叛逃》ISBN:9789861993645 
作者:半路
出版社:PCuSER電腦人文化
出版日期:2012/09/27

主觀評價:★★★★★

2014年2月12日 星期三

[Xcode] 取得螢幕畫面尺寸 Device Screen Size

原本只有iPhone 4以下的幾種與iPod時,螢幕尺寸很單純,所以可能只需要知道現在使用的是iPhone/iPod或iPad,因為就只有這兩種尺寸。但是當iPhone 5出來之後,螢幕的比例被拉長了,開發者不可能任由設置的圖檔在不同的裝置中被裁切,甚至是壓縮變形,影響美觀,更會影響使用者的感受,因此,我們必須判別不同的螢幕尺寸,來做適當的應對。
可以透過UIScreen類別來處理,如下
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
/* 分解動作是這樣:
CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;
*/
CGFloat screenWidth = screenSize.width;
CGFloat screenHeight = screenSize.height;
screenSize的width與height屬性可以分別取得裝置螢幕尺寸的寬與高,但其實不管是iPhone 5或是iPhone Classic螢幕寬度尺寸是一樣的(320.0f),所以我們只要用螢幕高度去判斷目前的裝置即可,方法如下:
if (screenSize.height > 480.0f) 
{
   // iPhone 5
   NSLog(@"iPhone 5");
} 
else 
{
   // iPhone Classic
   NSLog(@"Not iPhone 5")
}
iPhone 5的螢幕高度會是568.0f,而iPhone Classic的是480.0f,所以只要偵測到的高度大於480.0f,便可得知目前使用的是iPhone 5系列裝置。將上述程式碼中的紅字部分替換成你需要執行的動作,就趕緊執行看看吧~

相關參考資料:
官方UIScreen Class Reference:link
How to detect if the device is an iPhone 5(包含判斷iPhone或iPad):link

2014年2月10日 星期一

[Xcode] 啟動畫面Launch Image

Launch Image (Default Image)是一個當系統啟動APP時,在APP運行的準備期間會暫時顯示的靜態圖片,等到APP正式開始運作時,這個圖片便會被移除。加入了這個畫面可以提供給使用者即時的回饋,讓他們知道已經確實啟動了APP。倘若開發者並未設置Launch Image,在按下APP icon後到正式載入軟體畫面之間,會有一小段時間是全黑或是全白畫面,這樣的畫面會讓使用者有不好的感受,所以建議要設置Launch Image提升使用者經驗喔!

接受的檔案格式為.png檔,請避免使用交錯式的.png檔(interlaced PNGs)。

以iPhone與iPod來說,需要準備三種尺寸的.png圖檔,並且檔名設置與下列相同:
尺寸1 (320×480)   檔名:Default.png
尺寸2 (640×960)   檔名:Default@2x.png
尺寸3 (640×1136) 檔名:Default-568@2x.png

設置方法很簡單,將準備好的三個圖檔匯入專案中,點選Images.xcassets這個檔案,選擇LaunchImage,並且將圖檔拖曳至對應的方框中即可完成設置囉!也可以自己另外再建置新的LaunchImage Set,按右鍵就可以看到選項,操作畫面如下圖:

相關參考資料:
官方iOS App Programming Guide - App Launch (Default) Images:link

[iOS] 調整系統音量(System Volume)_ Objective-C

尤其是遊戲與音樂類別的APP中,常會提供音量調整的介面,而這個音量大小很多時候都是牽動著系統音量的。曾經使用過一個音樂播放程式,有scroll bar可調整音樂音量,但是其音量的調整範圍卻是建立在系統音量之下,意思就是說,當今天系統音量是0.1時,用這個APP中內建的介面去調整音量,怎麼調都調不大聲,真正播放出來的聲音只介於0~0.1之間,由此來判斷,這個APP的音量控制,可能是使用AVAudioPlayer的volume屬性來做調整的。
如果想在APP中調整系統音量,方法有兩種,都是使用MediaPlayer.Framework,所以請記得在專案裡面加入喔:

方法1. 透過MPVolumeView
這個方法是透過MPVolumeView自動生成的scroller,讓使用者可以在APP中手動調整音量。
在.h標頭檔中將MPVolumeView.h匯入
#import <MediaPlayer/MPVolumeView.h>
.m實作檔中加入以下程式碼:
MPVolumeView *volumeView = [[MPVolumeView alloc] init];
[volumeView setFrame:CGRectMake(130, 305, 166, 40)];
[self.view addSubview:volumeView];
將紅字的部分替換成你想要的位置與大小,執行看看,就會看到畫面中出現一個scroller。試著拉動看看,會有股無名火從心中生起,想罵我這個騙子,因為就只是個scroller呀!與系統音量一點關係也沒有,按了右側的實體按鍵,也沒看scroller有什麼改變。
大人真是冤枉呀!我也是照著努力查來的資訊這麼做的咩!也是堵在這久久無法前行,之後發現,還真要騙才行!要先騙編譯器說:『唉嘿~我這個APP現在可是要播聲音的呢!這個...音量的事情...要麻煩...(搓手)』,要先行告知,方法就是先在專案中匯入一個音樂檔,並且加入AVFoundation.framework,接著撰寫下列程式碼:
在.h標頭檔中將AVFoundation.h匯入
#import <AVFoundation/AVFoundation.h>
在.m實作檔中加入
AVAudioPlayer* audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"test.mp3"]] error:NULL];
[audioPlayer prepareToPlay];
[audioPlayer stop];
將紅字替換成你的音樂檔名即可。執行看看,這次在按右側實體按鍵時,scroller也會跟著改變了!(如果本來就已經在播放影片跟音樂的話,上述的這一段應該就不需要了。)

方法2. 透過MPMusicPlayerController的volume屬性
其實volume這個屬性在iOS 7.0已經不宜使用了(deprecated),所以有許多做鬧鐘相關APP應用的開發者感到非常困擾,雖然硬是要用的話還是可以用啦!所以還是介紹一下。
請先在.h標頭檔中匯入MPMusicPlayerController.h,如下:
#import <MediaPlayer/MPMusicPlayerController.h>
至.m實作檔中,在需要程式自動調整系統音量的函式中加入下述程式碼:
MPMusicPlayerController *musicPlayerController = [MPMusicPlayerController applicationMusicPlayer];
musicPlayerController.volume = 1.0;
將紅字替換成你想要的音量大小,範圍為0.0~1.0之間,即可不透過使用者手動來改變系統音量,但在改變的同時,手機上會顯示出你調整的音量大小。
相關參考資料:
  • 關於volume屬性的官方文件
  • MPVolumeView之救人一命的大好文章:link
  • 官方Media Player Functions Reference:link
  • 官方MPVolumeView Class Reference:link
  • MPVolumeView Class教學:link
  • 監聽系統音量變化教學:link
2014/08/01 更新:
[iOS] 調整系統音量(System Volume)swift版本: link