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

2015年1月19日 星期一

[Robotlegs] Actor 找不到 IEventDispatcher 的依賴注入

今天嘗試將 FlexUnit (1.5)和 Robotlegs 兩個 framework 結合在一起,作為重構程式碼之用。開始還算順利,當我把假類別置換成整理過的實際類別時,測試回報「找不到 IEventDispatch 的 Inject 資訊(如下)」,造成無法開始撰寫第一個測試案例。

Error: Injector is missing a rule to handle injection into property "eventDispatcher" of object "[object TestingLogic]". Target dependency: "flash.events::IEventDispatcher", named ""

在程式碼中查了半天,就是沒有看到有任何需要 Inject 這個類型的資料。因為  Actor 是 Robotlegs 的既有類別,理論上應該不會出現缺少需要的 Inject 物件才是。所以中間一度懷疑是不是之前的同事去手動調整了的 Robotlegs 的核心程式。花了一點功夫,把 swc 解壓縮來看看,也看不出來有什麼異常⋯ (中間還查到另一段無關這次錯誤的歷史程式)

最後把焦點拉回到 Robotlegs 本身,因為 Context 本身具有發事件的能力,因此作為其 Model 元素的 Actor ,應該也是利用和 Context 一樣的物件來發事件,否則 Context 就得偵聽一大堆 EventDispatcher 所發出的事件。所以缺少 IEventDispatcher ,應該和 Context 有關,其中最可能的,就是在初始化的時候所帶入的 DisplayObjectContainer,這個類別有實作 IEventDispatcher 介面。

最後在這個地方的參數加上 new MovieClip(),就解決了這次的問題。也發現到原來在 Robotlegs 的事件發送,是依靠建構時傳入的元件,而不是由自己實作 IEventDispatcher 介面。不知道這個機制在 2.x  的版本有的改變,有機會再去試試看。

作個筆記⋯

2014年2月14日 星期五

Zinc 全螢幕功能需要注意的地方

Flash 可以輸出成為執行檔,不依靠 flash player 直接在作業系統中執行。另一種角度來說,就像是把自己寫的程式和 flash player 包在一起。成為執行檔可以打開一些限制,像是能夠同時讀取本機與網路上的資料,或是執行系統命令。不過本來就沒有的寫入檔案功能,並不會因此冒出來。

全螢幕的功能,就是變成執行檔可以使用的功能之一。

在 MDM Zinc 裡,猜想是因為帶入的多視窗的概念,導致既有的方法失效,需要用它所提供 Forms 的方法來達到視窗的最大化、最小化、還原。最大化和全螢幕不同,全螢幕的狀態會把系統工具列、 Dock 等也一併隱藏。

使用 Zinc 開發的專案,很早就發現一個狀況,就是全螢幕的功能正常,但是取消全螢幕的功能卻時好時壞,系統工具列在取消的同時出現,但是程式並沒有回到原來視窗的狀態,還是維持全螢幕的大小,只是上頭多出現了系統工具列。一直到最近才找到時間去研究這個問題。

2014年2月7日 星期五

使用 MDM Zinc 遇到的兩個問題

MDM Zinc 是一個能夠把 Flash 發佈檔 swf 打包成應用程式,能在 windows, mac, linux  上直接執行,除此之前,藉由呼叫它所提供的函數庫,能讓 Flash 程式具有如同一般應用程式的能力,達到像是寫入檔案、取得網卡 Mac Address…等原本 Flash 不允許作的事情。第一次和它接觸好像是在五,六年前,還是 2.0 的版本,為了作一個單機、展示用的行銷光碟。

幾個月後,因緣之下又接到類似的需求,為了要讓 Flash 能夠寫入檔案,我又再一次選擇了這個工具,只不過不同的是,這次 4.0 的版本反而讓我吃了不少苦頭,花了兩三個星期的工夫才找到問題答案。在此作一下記錄,也許哪個遇到一樣問題的人,有緣看到這篇文章能夠少繞一些路。

這次發佈程式的平台是 mac,使用的是 ActionScript 2 的語法。遇到的問題分別是「文字輸入框裡無法出現游標,退位鍵在刪除一個字後就卡住了」,另一個問題則是「當程式打包成安裝檔,順利安裝到 mac 之後,不管多少支程式,在 launchpad 裡都只有一支程式的圖示」。

2012年4月16日 星期一

Flex 解析 XML

前陣子在 Flex 上實作簡單的所見即所得編輯器,當時是參考網路上的範例,利用既有的「TextArea」再加上「TextFlow」的操作達成,不過在儲存的時候遇到狀況。因為不是單純只在 Flex 裡呈現,所以需要讓它輸出成較接近 HTML 格式的內容。而 Flex 既有的 TextConverter 類別,只支援很古早的 HTML 語法,不但使用早就不建議使用的「<Font>」標籤,而且還會漏掉一些像是文字背景色的屬性。

為了記錄屬性以及避免未來可能發生的語法問題,只好去查文件去自行建立編/解碼的 TextFormat 類別,花了一天多的時間,將當下用到的屬性都加進去,能夠編/解(自認為)符合 HTML 5 格式的字串,一開始的使用上沒有遇到什麼問題,一直到同事反應出狀況才將這個放了一兩個月的程式再翻出來。

2012年3月25日 星期日

使用 FLEX 連結 FTP Server 初探

最近公司的一個使用 Adobe AIR Runtime 製作的工具,需要包含上傳檔案的功能,由於檔案可能超出一般 http server 的上傳上限,或是等待時間。所以產生需要修改上傳模式的研究需求,想到的方式有兩個,第一種是將要上傳的檔案切割後分開上傳,在伺服器端將這些片斷拼回原來的檔案。而第二種方式則是改用本來就支援大檔案的傳輸協定,像是拿 FTP 取代 HTTP 傳輸檔案。

我負責的是後者,在網路上查詢了一些資料,發現一些網路上的範例有提到使用 Socket 和 FTP Server 建立連線,以資料串流的方式上傳檔案,並沒有發現 Flex framework 裡有提供類似 FtpClient 的類別可以使用。不過在嘗試理解範例的同時,發現一些似乎沒有寫完整的地方,讓人覺得有「規則沒講通」的感覺,為此花了一些時間去了解一下 FTP 的機制,在底下記錄一下已經理解的內容…


首先是 FTP 的傳輸特性,它由一開始就是設計來作為檔案傳輸的協定,在溝通上有兩種類型的連線(頻道),分別為「command channel(命令頻道)」和「data channel(資料頻道)」,前者用來發出命令以及取得命令的結果,後者則是資料的傳輸。以一般使用者的角度下認知的「保持連線狀態」指的是 command channel 仍在連線狀態中。但是實際上在一段時間沒有任何動作下,達到 Server 設定的閒置上限(timeout)後會被 Server 斷線,所以其實一些 FTP 軟體會在背後幫使用者作重新登入的動作。

2011年10月15日 星期六

判斷對象為「物件」

這個標題起得有些奇怪,依照大多數物件導向的理論中,Object 類別是所有的類別的「根」,也就是說,除了一些基本型態的變數(如︰int, float…等),所有類別都是 Object 的子類別。不過,偏偏就讓我遇到一個得判斷「純 Object」的狀況。

事情是這樣子的,我所負責的專案中間有一個編碼/解碼的功能,採用 JSON 格式的字串進行資料儲存。依照「測試驅動開發」的思維,得作一個測試程式,來判斷解碼後可以得到和原始資料完全相同的內容,因此放入假資料開始撰寫程式。

一開始我思考到,JSON 字串通常是用來存放值名對,或是陣列的資料。而身為制定 JSON 格式的自己,很清楚不會放入其它奇怪的資料型態,只要比對每一個鍵值和所包含的內容即可。因此我的第一版程式沒有花費太多時間就寫出來了。

後來由於要編碼的內容變得複雜,得放入數量不固定的多筆資料。因此 JSON 的內容,由原來的值名對 + 基本型態,又多加上了陣列 Array。由於 Array 也是一種物件,所以兩個陣列必須進入的迴圈對每一個元素進行比對,若是直接使用「A == B」則為因為 Array 存放在的記憶體位置不同,而總是得到 false 的結果。它讓我花了一些時間作思考,最後決定使用遞迴的方式進行,以免出現陣列之中間又出現陣列。

再過不久,我發覺資料變得更加複雜,必須得在陣列或是屬性中加入另外的 Object 類別,在 JSON 格式中是被允許的,不過對於我的測試、檢查程式來說,就是一場災難。其中最糟的一點是 Flash AcrionScript 語法中,基本型態也是 Object 的子類別。因此底下的判斷為真…
1 is Object

2011年8月4日 星期四

讀取串流影像

把 Red5 主機架起來,也安裝了測試用的範例,但是測試視訊直播的結果發現畫質不夠理想,翻出原始碼修改後仍然沒有顯著的改善,猜想改使用較新的 AVM2 (註)播放會有比較結果。但是當準備開始實作前,卻發現忘了程式要怎麼寫,回想不起一兩年前的回憶,被迫只好自己去上網研究。研究後發現還滿簡單,在這裡作下記錄…

無論是廣播端(發出訊號)或是接收端(收到訊號)都需要先和 Red5 建立連線,皆需要 NetConnection 類別,再來就是需要串流 NetStream 類別。因此第一步就是建立連線…

2011年8月3日 星期三

Red5 Server 的安裝

RED5 Server 是一個以 Java 撰寫,可以取代的 Flash Media Server 部分功能的伺服平台,算是 Flash 影音串流,即時互動的另一個 Server 解決方案。對我而言它的優點當然是免費,可以很放心的取得,使用,再來就是因為它是一個使用 Java 寫出來的「軟體」,因此可以不限於在 Windows 或 Linux 下使用。但是缺點則是這個平台的開發速度不快,並且說明文件不多且有些是很舊、不能使用的版本,這應該是和開發人員不夠多有關係。

為了試驗串流技術,又再一次安裝起這個軟體,在此作一下記錄。