2014年11月24日 星期一

開發日誌-0049 rollTurtle! prototype demo - pause btn UI


本週開始製作暫停(pause)選單,
原本覺得這是小意思,
打算只花一週的時間就解決掉,
但是果然實際下去做又遇到許多做之前沒想到的細節跟狀況^^"
所以應該又會拆解成兩部份,並且多花一週左右的製作時間吧。

暫停(pause)的功能在gamesalad有內建的function可以用,
分別是pause以及unPause,
功能也分別就是字面上的意思。

它的原理其實是凍結目前的畫面暫停後,
載入另一個scene疊在目前的scene上,當做暫停,
另一個被載入的scene裡可以放暫停的選單,
要解除pause的狀態的話,
只需要在按鈕事件裡放一個unPause就可以了,
很單純方便好用。

但是內建的暫停功能有一個很大的缺點,
因為是載入另一個scene,
所以按下pause後會有loading的時間@@
視你的scene的物件或程式碼的複雜度loading的時間會不一定,
愈單純,loading的時間會愈短,
但是我反覆測試了非常多次,
就算是沒有任何物件與程式碼、單純乾淨的scene,
也會感覺到至少有1秒鐘的loading,
更糟糕的是,
連unPause解除暫停的時候也需要loading,
也是大約至少會有明顯的體感1~1.5秒鐘時間。

查了一下gamesalad的官方討論區也早就有很多人在反應這個問題,
希望官方能把只要有用到pause function相關的物件就統一在initial事件時一併載入,
就能達到暫停時不需讀取,
較好的遊戲體驗,
但是gamesalad的官方人員出來解釋,
似乎是他們覺得目前這樣子的做法效能較佳,
暫停事件需要的物件在暫停時才被載入,
解除時就消滅它們並釋放出記憶體,
讀取的時間只有短短1~2秒不會造成什麼大問題。

關於這點我是不太認同,
自己玩過很多遊戲,幾乎沒有遊戲按下暫停跳出選單還要停頓1~2秒的,
都是瞬間就彈出選單,
但是目前官方提供的做法就是需要loading,
雖然說是可以自己用其他的方式來達成pause的效果,
但是這次我做的是動作遊戲,
如果要自己客製化pause效果的話,
要凍結的物件與參數太多了,
加減速效果等在解除暫停的瞬間也不容易還原,
所以在苦惱了2~3天後,
還是決定跟官方功能妥協@@"

最後決定用一些視覺上的技巧來減輕並修飾loading的感覺,
當程式沒辦法克服的東西,
就是用視覺來盡量修飾,
這在跟程式設計師合作的時候也常常遇到這種情況^^"
目前是處理到個人覺得可以接受的感覺,
至少是不會覺得奇怪,
要用文字形容的話,
大概就是

"按下pause > 載入 > 開始覺得怎麼會要等的感覺出現的時候 > btn效果載入完成"

目前這一塊還沒有全部完成,
除了pause btn的UI外,
還有pause的menu,
因為除了多花了一些時間在處理上述的突發狀況外,
UI的設計部份也同時修改了不下10來次,
在製作的同時,
以實機測試iPad跟iPod touch,並且要保持在最佳的universal的效果,
就會發現很多當初沒有預想到的問題,
自己愈看愈不滿意,
所以就邊做邊進行調整,
最後決定把pause的整體功能切成兩塊,
再多花一週來把整體製作調整的更好。

最後一樣來看看實際的運行效果吧,
rollTurtle! prototype demo - pause btn UI !


沒有留言:

張貼留言