2014年5月16日 星期五
[AS][starling] Starling 的性能優化
主要是要記錄這篇文章
http://wiki.starling-framework.org/manual/performance_optimization
加上一些心得!
starling 相關的的優化是不是 有用 我沒有試過 !
不過裡面寫的 AS 的優化 很多是有用的
像是迴圈的 幾個部分 我都測試過 都有幫助 !
不過主要也是要記錄這篇文章!!!
2014年5月6日 星期二
[AS] 仿 Tales of Link 的操作控制器!
我是仿這個遊戲的戰鬥開發的
建立了一個簡單的 "操作組件" 的 原型 !
不過還是有許多地方需要優化 ! 像是動畫效果 畫線的準確! 起點要畫圓 等等
因為是原形就隨意帶過 XD
相關重點細節 我也預留好一些後路可以走 !
基本上分成三個部分 !
1. 創造人物
2. 畫線控制
3. 角色進出場效果
戰鬥動畫 就不在這個 "操作組件" 中了 !
至於畫線時的 hit 乘倍 攻擊力顯示 等等等 的部分
都可以透過外掛模組掛載進去! 就能相對應產生效果!
或者應用特殊的畫線規則!(能斜角? 不能斜角?)
相關的部分我也預留好接口
特殊連線必殺技 (橫排一直線連線,Z字型連線 等等的特殊連線)
等等等的部分!
如果要再細分 就是我上面說的三個部分 !
在拆分 不過暫時就這樣吧 XD
建立了一個簡單的 "操作組件" 的 原型 !
不過還是有許多地方需要優化 ! 像是動畫效果 畫線的準確! 起點要畫圓 等等
因為是原形就隨意帶過 XD
相關重點細節 我也預留好一些後路可以走 !
基本上分成三個部分 !
1. 創造人物
2. 畫線控制
3. 角色進出場效果
戰鬥動畫 就不在這個 "操作組件" 中了 !
至於畫線時的 hit 乘倍 攻擊力顯示 等等等 的部分
都可以透過外掛模組掛載進去! 就能相對應產生效果!
或者應用特殊的畫線規則!(能斜角? 不能斜角?)
相關的部分我也預留好接口
特殊連線必殺技 (橫排一直線連線,Z字型連線 等等的特殊連線)
等等等的部分!
如果要再細分 就是我上面說的三個部分 !
在拆分 不過暫時就這樣吧 XD
2014年5月5日 星期一
[AS][推廣文] 含 UI 的 Unit Test
偷偷的推廣一下 單元測試 ( Unit Test)
先看一個範例
簡單的 Panel 的 Unit Test 範例
其中 我有故意讓一項出錯 !
來證實 unit test 是有用的~~
單元測試 對我來說 就是用 程式來說話 !
利用 "測試程式" 來告訴下一位 維護者 使用者 測試者 繼承者 !
這個程式
有什麼限制 ?
正常狀況會是怎樣 ?
異常狀況會是怎樣 ?
邊界情況會是怎樣 ?
簡單的講 看完了 "測試程式" 就知道這個 該怎樣使用!
或是有甚麼不能用的 ! 錯誤時會拋出哪種錯誤 ! 有哪些特別的地方!
或是更簡單一點的!
某人 修改這個 程式 之後 ! 是不是會造成一些問題 ?
那只要跑一次測試程式 ! 就可以看到 是不是和預期一樣 !
如果發生了以前沒發的問題 !
可以先寫測試程式 保證問題的重現 !
然後 在修正程式 跑測試程式 看會不會 出現問題 !
不管是舊的測試也好 新的測試也好 ! 都可以一次驗證!
如今我將 UI 方面的測試也整合進 JenKins 中了~~(下圖就是跑最上面的範例的喔!)
證明了就算 setTimeout 等等 對 UI 的模擬測試 !
也是可以在 JenKins 中跑的 !
下面是我對上面的範例的一些說明!
簡單的講這個面板分成兩個部分!
一個是 面板的控制 (Mediator)
一個是 面板 UI 的動作 (MyPanel)
為了 UI 可以抽換 控制效果不會改變 ! (按下按鈕後 是否鎖定不能連按....等等的部分)
所以我將 UI 的部分 完整隔離在 Mediator 的外部!
也為了可以分開測試 !
一開始初始化面板的部分如下
所以測試的函式也分成兩個!
一個測試 控制 邏輯
一個測試面板的動作控制
下面就是 控制邏輯 的測試類別~
啟動和清除
在測試程式中 啟動時 可以灌入專門 的 虛擬面板,
用來測試 監聽 邏輯控制有沒有按照我希望的運行
測試結束後 把面板 虛擬面板 一些相關的測試函數 通通清除
這邊可以看到部分的 操作控制! 因為 testPanel 是我自己做出來測試 控制邏輯的
所以我很清楚 也開出API 可以取的裡面的物件 等等等的東西
好用來做監聽 測試 !
下面是對 虛擬面板 連續發送滑鼠事件 來測試 是否可以連續點擊
另外一個 ReDo 的部分 就是測試是否 可以隔一段時間後 再作 點擊動作!
但是在期間內 卻 無法作 "點擊動作" 的測試 !
那這是測試 500 毫秒邊界的測試 !
這個 500 毫秒也就是特殊商業邏輯 特殊控制 等等等的部分!
那只要看了這個 邊界測試 就知道 500 毫秒內 這個控制邏輯 是不接受 任何點擊動作的
一定要等 500 毫秒後 才接受控制! (雖然這個可以在 UI 層面作掉, 但是我還是整合進去測試)
下面來看 UI 面板的測試!
因為是 被控制的面板 ! 所以不需要依賴 控制邏輯
也不必知道 或是 了解是否有控制單元的存在
所以不用 制作出 虛擬控制單元 來進行測試 !
這一點 和 剛剛的 控制邏輯的是不一樣的
因為控制邏輯 依賴有一個 被控制的面板 才能運行~
下面是用來測試是否可以鎖住面板的測試
因為 MyPanel 是這樣寫的 所以會有問題 (我故意留下 讓測試會出錯的部分!)
因為就算是 按鈕 enabled 被關閉了 但是監聽還在的話 對這個按鈕直接丟事件!
還是會被聽到的, 但是實際上 Button 這個 元件 再 enabled 是 false 的情況下
手動去按是不會丟出"點擊"等相關事件的 ( 這個也是測試 和實務上的不同 ! )
但是! 我在 邏輯控制的時候 的虛擬面板 確是可以運行請看下面的 虛擬面板 類別
控制邏輯 的測試程式 使用的 虛擬面板 的部分
確是有完整的 移除監聽 所以在邏輯測試時 虛擬面板 不會出錯 !
下面是 面板的 文字容納量的測試!
這個讓我們知道 這個 UI 在文字是 12345678912 得時候,
文字框的寬度 就不夠了 會產生切字的問題 !
textCaseUILimitLess 是測試多少個字 是可以顯示不會被切字的最上限
這兩個對我來說 就是 文字框 顯示的 邊界測試 !
這樣就算將 UI 的一些 可視 手動操作的 等等的部分都和 unit test 串起來了 !
最後 是將兩個測試 串起來 !
並且透過 sharedEvents 將相關的東西傳遞出去 讓 air 程式出報表
就可以整合進 JenKins 了
訂閱:
文章
(
Atom
)
