2014年5月23日 星期五

[AS][AIR] Android App 取的前置鏡頭

因為自己要弄一個 簡單的 APP demo  時一直拿不到前置鏡頭

所以花了將近兩個小時再找資料..後來在一次回去翻 ActionScript® 3.0 參考

才發現有一個 position 的屬性

那問題就解決了!

下面是 as 的程式碼

        public function tryGetFrontCamera():Camera {
            var numCameras:uint = (Camera.isSupported) ? Camera.names.length : 0;
           
            trace(numCameras);
            for (var i:uint = 0; i < numCameras; i++) {
                var cam:Camera = Camera.getCamera(String(i));
                if (cam && cam.position == CameraPosition.FRONT) {
                    return cam;
                }
            }
            return null;
        }


 application.xml 中需要新增
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-feature android:name="android.hardware.camera.front" android:required="true" />
        <uses-feature android:name="android.hardware.camera" android:required="false" />


這樣就可以取的手機上的前置鏡頭了!

PS: 題外話 !
我一直以為前置是螢幕後面的那個!
跟螢幕同一邊的才是後置...沒想到居然是相反的!
話說預設是 "螢幕後面" 的鏡頭 !!

記錄一下一個搞了很久的東西

[AS] Starling 的相關優化!

以前只作了基本 可以動之後 就很久沒碰了!

在找資料時看到 git  上有人優化的版本!

https://github.com/zmLiu/StarlingFeathers

稍稍關心一下 是作了哪些部分 ?

1. enterFrame 的統一管理! 關閉!

2. 傳輸數據包的改良!

3. 跳過 ADD_TO_STAGE,REMOVE_FROME_STAGE事件, 的添加方式!?!!

4. 主動 跳帧 策略!


2014年5月16日 星期五

[AS][starling] Starling 的性能優化


主要是要記錄這篇文章

http://wiki.starling-framework.org/manual/performance_optimization

 加上一些心得!

starling 相關的的優化是不是 有用 我沒有試過 !

不過裡面寫的 AS 的優化 很多是有用的

像是迴圈的 幾個部分 我都測試過 都有幫助 !

不過主要也是要記錄這篇文章!!!

2014年5月12日 星期一

[as] 原來 (Flash Professional CS6 及更新版本) 不支援放映檔

指定 SWC 檔案與放映檔的發佈設定

SWC 檔案是用來散發組件。SWC 檔案包含編譯後的影片片段、組件的 ActionScript 類別檔案以及其他用於描述組件的檔案。
放映檔是一種同時包含已發佈 SWF 和 Flash Player 的 Flash 檔案。放映檔可以像一般應用程式一樣播放,不需要網頁瀏覽器、Flash Player 外掛程式或 Adobe AIR。
  • 若要發佈 SWC 檔案,請從「發佈設定」對話方塊的左欄選取 SWC,然後按一下「發佈」。
  • 若要發佈 Windows 放映檔,請從左欄選取 Win 放映檔,然後按一下「發佈」。
  • 若要發佈 Macintosh 放映檔,請從左欄選取 Mac 放映檔,然後按一下「發佈」。
若要使用與原始 FLA 檔案不同的檔案名稱來儲存 SWC 檔案或放映檔,請輸入輸出檔案的名稱。
注意:
(Flash Professional CS6 及更新版本) 不支援放映檔。

來源網址
https://helpx.adobe.com/tw/flash/using/publish-settings-cs5-5.html

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 了