2013年9月17日 星期二

PullToRefresh

PullToRefresh 是作者製作的類別, 目的在Adobe AIR mobile 提供用戶下拉刷新動作, 建基於Feathers 的兩個元件(GroupedListList). 當用戶在目錄向下拉和放手, 會產生更新事件, 然後把目錄內容更新.

用戶把目錄向下拉 [範例]
   
用戶放手後, 目錄等待更新

以下是編寫的簡單步驟:

  1. 引入(Import) 相關的類別
    import feathers.controls.PullToRefreshList;
    import feathers.controls.List;
    
    
  2. 建立目錄內容
    var data:Array =
      [
        { text: "Aardvark" },
        { text: "Alligator" },
        { text: "Alpaca" },
        { text: "Anteater" },
      ];
    
    
  3. 建立目錄和添加事件監聽 (PULL_TO_REFRESH_EVENT)
    var list:List = new PullToRefreshList();
    list.dataProvider = new ListCollection(data);
    list.addEventListener(PullToRefreshList.PULL_TO_REFRESH_EVENT, listPullToRefreshHandler);
    this.addChild(list);
    
    
  4. 當用戶產生下拉刷新事件, 我們可以呼叫伺服器來更新目錄內容
    private function listPullToRefreshHandler(event:Event):void{
      ...
      // call server to return some data
      ...
    }
大家可以 [下載] 範例試試看.

2013年4月22日 星期一

PhysInjector 2D 物理引擎

PhysInjector 是一個基於Box2D 的物理引擎. 可以整合Starling 圖像引擎, 並透過Adobe AIR 發佈在iOS 和Android 系統運行.

請按 [觀看] 軌道重力Orbital Gravity 範例

若開發一個Angry Birds Space 遊戲, 我們可以使用這個軌道重力物理引擎喔.
作者在iPad2 進行測試, 並能順暢運行數個物件.

原生手機對話框 (Native Dialogs)

NativeDialogs 是一個提供原生手機對話框的外掛. 它在iOS 和Android 系統提供接口給Adobe AIR 呼叫. 當中包括NativeAlert, NativeProgress, NativeListDialog, NativeDatePickerDialog, Text input Dialog 和Toast 等對話框.

NativeDatePickerDialog 的介面

日期對話框NativeDatePickerDialog 的呼叫語句:
var d:NativeDatePickerDialog = new NativeDatePickerDialog();
d.displayMode = NativeDatePickerDialog.DISPLAY_MODE_DATE;
d.title = "DatePicker";
d.message = "Select date:";
d.date = new Date();
d.show();

大家可以 [下載] 範例試試看, 作者在Flash Builder 設定NativeDialogs_AS.swcNativeDialogs.ane 外掛的路徑和關掉一些問題.

2013年4月17日 星期三

在iOS 背景運行Adobe AIR

作者發現在iOS 運行NetConnection 網路連結, 關閉螢幕後再啟動, 會產生錯誤導致程序崩潰. 這個錯誤不能以Try、Catch、Finally 捕捉錯誤事件. 我們必需在發佈的xml 檔案中, 加入以下設定來解決:

<iPhone>
    <InfoAdditions>
        <![CDATA[
            <key>UIApplicationExitsOnSuspend</key>
            <true/>
        ]]>
    </InfoAdditions>
</iPhone>

除了網路連結外, 在背景運行音樂和位置更新相關設定, 可以參考這個連結.

2013年1月28日 星期一

找不到iOS 裝置

作者在Windows 環境下, 使用Flash Builder 4.7 或Flash Professional CS6, 透過USB 連接iOS 裝置進行除錯發佈測試, 結果找不到任何iOS 裝置連接:

Flash Builder could not find a connected device.

以下是者作的電腦配置:
  • Windows 7 64 bit
  • iPad2 iOS 6.0
  • Flash Builder 4.7 或Flash Professional CS6 (Version 12.0.2.529) 更新請參考
  • Adobe AIR SDK 3.6
  • iTunes 11.0.1.12

在Goolge 找尋下, 發現一個方法可以暫時解決這個問題:
  1. C:\Program Files (x86)\Common Files\Apple\Apple Application Support\ 路徑, 找到SQLite3.dll
  2. SQLite3.dll 檔製至C:\Program Files\Adobe\Adobe Flash Builder 4.7 (64 Bit)\eclipse\plugins\com.adobe.flash.compiler_4.7.0.XXXXXX\AIRSDK\lib\aot\bin\iOSBin\

其實這個問題, 不是每個電腦會發生, 者作朋友的電腦在相同配置條件下, 亦不會遇上. 相信與電腦內曾安裝SQLite 軟件有關係.


後記:
對Flash Professional CS6 的用戶, 解決方法與Flash Builder 相似, 設定Adobe AIR SDK 請參考.

2013年1月17日 星期四

P2P 指令同步播放影片

作者製作一個處理Peer-to-peer(P2P) 的物件(P2PCore), 它透過Action Script 原生的NetConnectionNetGroup, 簡單地傳送文字, 圖像或物件, 達成點對點資料傳送.


以下為大家介紹, 如何利用P2P 技術, 在iPad 與PC 之間同步播放影片: 
  1. 建立P2PCore 物件, 為它加入監聽事件:
    var _core:P2PCore = new P2PCore();
    _core.addEventListener(P2PEvent.LOAD,loadHandler);
    _core.addEventListener(P2PEvent.MESSAGE, messageHandler);
    

  2. 當P2PCore 連接成功, 為用戶介面加入監聽事件:
    function loadHandler(event:P2PEvent):void{
      scaleX1Btn.addEventListener(MouseEvent.CLICK, scaleX1ClickHandler);
      scaleX2Btn.addEventListener(MouseEvent.CLICK, scaleX2ClickHandler);
      video.addEventListener("stateChange", playheadUpdateHandler);
    }
    

  3. 當按下Scale x1 或Scale x2 按鈕, 透過P2PCore 廣播給所有裝置改變影片大小:
    function scaleX1ClickHandler(event:MouseEvent):void{
      video.setScale(1, 1);
      _core.sendObject({type:"setScale", value:1});
    }
    function scaleX2ClickHandler(event:MouseEvent):void{
      video.setScale(2, 2);
      _core.sendObject({type:"setScale", value:2});
    }
    

  4. 當改變影片播放位置, 透過P2PCore 廣播給所有裝置最新播放位置:
    function playheadUpdateHandler(event:Event):void{
      _core.sendObject({type:"playheadTime", value:video.playheadTime.toString()});
      video.play();
    }
    

  5. 若裝置接收廣播訊息, 改變影片大小或播放位置:
    function messageHandler(event:P2PEvent):void{
      var msg:P2PMessage = event.value as P2PMessage;
      switch(msg.data.type){
        case "setScale":
          video.setScale(msg.data.value, msg.data.value);
        break;
        case "playheadTime":
          // <----- only allow one controller
          video.removeEventListener("stateChange", playheadUpdateHandler);
          
          video.playheadTime = parseFloat(msg.data.value);
          video.play();
        break;
      }
    }
這個實例主要運用發出和接收指令, 達到影片同步播放功能, WiFi 穩定性會直接影響iPad 與PC 之間的同步效果. 若希望製作串流影片, 請參考這個連結.

大家可以 [下載] 範例試試看.

注意事項:
 - 在Flash Professional CS6 透過USB 連接iOS 安裝發佈請參考這個連結.
 - Flash Media Server 我們可以申請Adobe 公開伺服器 (rtmfp://stratus.adobe.com/) 作試驗或自行架設.

2013年1月10日 星期四

Flash Professional CS6 透過USB 連接iOS 安裝發佈

在Flash Professional CS6 版本12.0.2.529 中, 我們可以透過USB 連接iOS 裝置, 進行實機測試. 在Windows 或MAC OS X 平台兩者皆可, 過程無需透過iTunes 或越獄(Jailbreak) 後的iOS 裝置, 純粹USB 連接, 十分方便.

以下是更新Flash Professional CS6 和連接iOS 發佈方法:
  1. 在官方下載最新Flash Professional CS6 更新:

  2. 安裝完成後, 在Help -> Aboout Adobe Flash Professional 看到新版本編號 (12.0.2.529).

  3. 下載Adobe AIR SDK, 然後設定路徑. (設定方法請參考)

  4. 開啟一個AIR for iOS  新專案.

  5. 設定發佈對象為AIR 3.4 for iOS 或以上版本.

  6. AIR for iOS Settings -> Deployment 中, 選擇以USB 連接iOS 裝置進行實機測試.
    (Install application on the connected iOS device)


注意事項:
若曾經修改host 檔案, 在更新過程會發生錯誤訊息, 請把host 檔案暫時回復, 待更新完成後才可修改.
(host 檔案路徑: C:\Windows\System32\drivers\etc\host)