八月
18
2010
0

Adobe Air to Exe

最近想把air轉成exe檔案,卻遇到一些問題,首先

官方的說明文件是錯誤的,如果你照著作將會得到下面的錯誤訊息

-storetype is required


在這裡有提到解決的方法,不過有些地方要修正

1. 下載AIR 2.0 SDK 之後,直接解壓縮覆蓋到你現有的SDK中

2. 原文中

<application xmlns="http://ns.adobe.com/air/application/2.0beta">

改為

<application xmlns="http://ns.adobe.com/air/application/2.0">

正式版已經出來了

其實並不是變成原生EXE檔,而是加入了自動下載AIR Runtime的程序...

我的系統是win 7 64bit,目前看來一切正常

Written by in: 電腦三兩事 | 標籤:,
六月
23
2010
1

Flex Toast-style popup message

Android裡面有個很好用的Message呈現方式,就是會自己消失的popup window,覺得比Alert來說更不惱人,而且又有提示的效果

所以自己寫了一個Toast class,用法相當簡單


Toast.show("Message");

source

其實就是使用PopupManager再加上一個Timer類來計時,這邊會遇到要定義parent的問題

照抄Alert類的source code


//get parent
 if (!parent)
 {
 var sm:ISystemManager = ISystemManager(FlexGlobals.topLevelApplication.systemManager);
 // no types so no dependencies
 var mp:Object = sm.getImplementation("mx.managers.IMarshallPlanSystemManager");
 if (mp && mp.useSWFBridge())
 parent = Sprite(sm.getSandboxRoot());
 else
 parent = Sprite(FlexGlobals.topLevelApplication);
 }

Written by in: 電腦三兩事 | 標籤:
五月
31
2010
0

mx_internal_uid Problem

這是我最近遇到的問題,因為自己寫的AMF function是吃進一個VO,然後按VO的property name對應database column存取,這邊發生一件怪事,當我把VO賦給UI物件(DataGrid)作為dataprovider時,裡面的VO多了一個mx_internal_uid屬性,導致我存入DB時發生錯誤,因為我的資料表中並沒有mx_internal_uid欄位,他就這麼輕易的弄髒我辛苦整理乾淨的VO,找到adobe reference的說明。

When Flex creates a UID for an object, such as an item in an ArrayCollection, it adds the UID as an mx_internal_uid property of the item. Flex creates mx_internal_uid properties for any objects that are dynamic and do not have bindable properties. To avoid having Flex create mx_internal_uid properties, the object class should do any of the following things: have at least one property with a [Bindable] metadata tag, implement the IUID interface, or have a uid property with a value.

目前我的作法是在Proxy取出VO的地方強制把mx_internal_uid刪除,但總覺得非常愚蠢,有空還是要刻一個VO template給他裝。

這邊又有個之前發生的怪事,我把RemoteObject取得的值當作一個data VO屬性,使用這個RemoteObject作為DataGrid的dataprovider,然後這個DataGrid將無法focus滑鼠指到的物件,上網查了一下猜想也可能是UID相同的問題,得要想辦法解決。

這邊用一個最簡單的想法─親手弄髒她!@@

在吃進VO當下就用new ObjectProxy(VO)封裝,由於ObjectProxy已經實作了get uid,所以VO不會被加上mx_internal_uid屬性,存入資料庫時就用下面的方法取回乾淨的VO

How to get Value(proxied) Object from ObjectProxy

Written by in: 電腦三兩事 | 標籤:,
五月
31
2010
0

How to get Value(proxied) Object from ObjectProxy

我最近遇到一個問題,因為要使UI物件同步資料所以使用了ObjectProxy,但我在回傳時不能直接把這個複雜物件給AMF,找了很久終於發現取回object的方法

原來這個變數是定義在package level,所以得要使用「::」字符取出


import mx.utils.object_proxy; //我沒打錯,小寫的代表變數namespace

var objectProxy:ObjectProxy = new ObjectProxy( {a: 123, b: 456} );

var vo:Object = objectProxy.object_proxy::object; // The object being proxied.

Enjoy!XD

Written by in: 電腦三兩事 | 標籤:,
四月
16
2010
0

SIC Flex Online Assembler

雖然不知道正不正確...

總言之就是把作業的java code在as上重寫一次XD

至少跑課本習題的答案是對的@@

link

Written by in: 電腦三兩事 | 標籤:,
一月
30
2010
0

Flex3 Class Diagram poster

終於寄來囉~我的C4 海報

adobe flex正版使用者可以申請到的API海報,我是使用教育版的(上傳學生證可以了),聽說也可以申請,就抱持著好玩的心態試試看了...

海報共有5張,每張內容都不同

申請網址

等不及的人按這邊

Written by in: 無聊隨筆,電腦三兩事 | 標籤:
十二月
27
2009
0

FLARToolkit (Argumented Reality) with Papervision3D

最近在玩一些AR的東西,AR(Argumented Reality)翻譯作「擴增實境」,不同虛擬實境是重建整個世界,AR則是在真實世界"加入"虛擬的東西,說穿了就是依賴圖形辨識技術,取得真實世界的三維空間,把東西加進來罷了

現在由於WebCamera的普及化,讓AR有更多出場應用的機會,開始有社群在AR的開源領域耕耘,最有名的就是ARToolKit,主要是在C實作,之後又被許多熱心人士移植到其他平台,我這邊使用的則是Flash的平台FLARToolKit,是從NyARToolkit(物件導語言,如C#、Java、Android) 移植過來的

ARToolKit本身提供了圖形辨識的Class,圖像來源則是沒有一定限制在WebCam,各個不同平台的library則是幫你實作好許多取圖分析的功能

也因為如此,FLARToolKit本身只做了辨識的功能,至於3D引擎則是要依靠其他library,比較常見的就是Papervision3D,也有人寫了一些不錯的整合library如FLARManager

基本上FLARManager已經包含了FLARToolKit以及Papervision3D(當然還有其他常見的3D引擎),所以我們可以從FLARManager開始實作程式,不需要再去找其他的library,並且作者也提供了完整的教學和document reference

十月
26
2009
0

Flex Based CMS

這個計畫還在構思階段,首先談到Flash的優勢,第一就是他並不存在相容性的問題,所有的呈現都是在Flash Player的VM框架中,開發者少了大多數相容性維護的問題;其二就是3D與圖形運算能力優異,能夠提供流暢且炫麗的使用者經驗。

CMS最重要的Management部分,老實說對Flex有點吃重,目前大多Flash網站是使用xml儲存訊息,不適合做為CMS,要維護龐大的資料內容,最起碼也需要使用料庫統,由於Flex是事件處理的機制,光是寫後台的重擔就讓人無法招架,在寫過幾次後台系統後,發現這塊領域不是Flex的長項,效能也不好,也並沒有發揮出繪圖的強項,畢竟後台只有管理者在看的,沒必要為了為了後台花去大半時間開發系統。

於是我開始傾向"寄生"在其他CMS的後台管理系統,比方說Wordpress,他已經包含了wp-admin的後台管理系統,使用其他CMS後台來建立資料結構,然後利用他們自身的template框架寫出與Flex溝通的介面(如xml-rpc)然後就可以專注在前台的效果開發了

基於採用其他系統後台這個想法,甚至可以為各大CMS系統(joomla、drupal)寫出Flex專用的界面,完成網站的無痛移轉!!(夢作的真大XD)

總結來說就是後台用其他系統,前台使用Flex模組,藉由定義好的各種元件與介面,可以在FlexBuilder快速編譯出漂亮的前台瀏覽畫面,哇嗚~好棒!

Written by in: 無聊隨筆,突發奇想,電腦三兩事 | 標籤:
十月
23
2009
1

Flex ScrollBar 自動下拉置底

最近因為寫到一些與log相關的程式,想要在TextArea中呈現log資訊,這邊提供一個方法,讓你可以在log更新時,scrollbar也自動往下拉到最底

關鍵的就是TextArea中的valueCommit event,如果你抓的是change event,只有在使用者操作UI時會發生,若TextArea是程式內部去負責更新,則不會有change event

所以要換成valueCommit,不論是程式更新或使用者操作都會發生事件

Dispatched when values are changed programmatically or by user interaction.

不過這個方法似乎會在wordwrap = true的時候有些問題...有時候沒有完全置底,原因是UI會在格子"將要"爆掉時,先秀出scrollbar來"準備"...真詭異

Example:

<mx:TextArea id="log" editable="false" valueCommit="{log.verticalScrollPosition = log.maxVerticalScrollPosition}"/>

 

參考原文

Written by in: 電腦三兩事 | 標籤:
九月
10
2009
2

Compare Android ArrayAdapter with Flex ArrayCollection

因為習慣了Flex的思考方式,所以感覺世界大一同阿!只是class名字換了XD

API解說

A ListAdapter that manages a ListView backed by an array of arbitrary objects. By default this class expects that the provided resource id references a single TextView. If you want to use a more complex layout, use the constructors that also takes a field id. That field id should reference a TextView in the larger layout resource. However the TextView is referenced, it will be filled with the toString() of each object in the array. You can add lists or arrays of custom objects. Override the toString() method of your objects to determine what text will be displayed for the item in the list. To use something other than TextViews for the array display, for instance, ImageViews, or to have some of data besides toString() results fill the views, override getView(int, View, ViewGroup) to return the type of view you want.

在使用UI物件的dataprovider(通常是ArrayCollection)時,Flex可以指定UI物件顯示該value object的特定一個attribute,或者組合成一個ItemRenderer來輸出畫面

Android中他同樣使用類似Flex的dataprovider的概念,叫做ArrayAdapter,不同的是,在輸出顯示畫面時,是呼叫ArrayAdapter中元素的toString()方法,也就是我們如果要在ArrayAdapter放入非String的複雜value object,並且要整理輸出在畫面上,就得要override該class的toString()方法

同Flex的ItemRenderer,override getView(int, View, ViewGroup) 方法來輸出其他view

 

做個總結

Flex ==> Android

ArrayCollection ==> ArrayAdapter

dataField ==> override toString()

ItemRenderer ==> override getView()

Written by in: 電腦三兩事 | 標籤:,

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com