顯示具有 AS3 標籤的文章。 顯示所有文章
顯示具有 AS3 標籤的文章。 顯示所有文章

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



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 了