顯示具有 學習筆記 標籤的文章。 顯示所有文章
顯示具有 學習筆記 標籤的文章。 顯示所有文章


[心得]在Flash中寫入UTF-8格式

0 意見

筆者最近試著把文字用writeUTFBytes的方式寫成檔案,雖然用文字編輯器讀取不會有問題,但如果再以Flash的URLLoader方式載入,文字會變成亂碼,且無法轉成XML物件,找了半天才發現問題出在BOM上



[教學]在FlashDevelop中使用條件編譯

0 意見

最近因為工作的關係,又把FlashDevelop裝起來了,雖然以前只拿來寫AS2,很少用來開發專案,不過裝完後才發現竟然新增了這麼多功能,且Plugin也很多,有許多FlashBuilder沒有的便利功能,雖然還用不習慣(快速鍵又要重背了...),但有機會筆者再介紹幾個不錯的Plugin。



[心得]將Unity log顯示在Firebug上

0 意見

之前有介紹過把Flex log顯示在Firebug上,這次改寫一個給Unity用的版本,之所以使用Firebug是因為Firebug在顯示上很清楚,且如果把顯示寫在onGUI上,onGUI錯掉也是不能顯示log,所以把log切出是比較理想的



ProtocolBuffer VS AMF3(fixed)

11 意見

感謝Atry的指導,筆者修改了一下範例,以求更客觀的比較結果,順便也比較一下修改前及修改後的效能差異

主要修改的有兩部分:

1. 使用optional取代required

2. scalar最佳化



[教學]在Flash中使用Google Protocol Buffers

1 意見

protocolBuffer.png

Protocol Buffer是Google所提供的一種結構化資料的編碼方式,俱備高效的序列化速度且支援格式擴充。以Flash來說就是類似AMF的資料傳輸格式,由於Protocol Buffer有支援多種語言版本,這次就來介紹Flash版的Protocol Buffer。



[教學]在AS3中使用列舉

0 意見

Actionscript 3本身沒有列舉,所以在開發Flash專案時大都以常數宣告成整數或字串的方式來區分類別,雖然不會有問題,但在開發大型專案時,常數的宣告方法反而會成為維護上的大問題。



Flash P2P 研究

0 意見

Flash 10及AIR 1.5支援P2P連線,這種通訊技術叫做Real-Time Media Flow Protocol (RTMFP),跟FMS(Flash Media Service)的RTMP不同,RTMFP是架構在UDP層,允許點對點連線,使用者只需連到RTMFP-capable 伺服器即可,目前Adobe有提供免費的伺服器─Stratus,透過Stratus我們可簡單做出VOIP或電視電話的功能,當然也能運用在遊戲上。

2009-08-21_184655.png

比較兩種技術,RTMP是透過伺服器溝通,所有的訊息都需經過伺服器,而RTMFP只需透過伺服器建立連線,之後的訊息交換以兩台電腦為主,且Stratus允許本地及NAT連線,在一般網路環境都可正常運作。

Flash P2P遊戲:real time mill

Stratus:http://labs.adobe.com/technologies/stratus/

教學影片:http://www.flashrealtime.com/tuts/p2p-in-flash.html

教學網站:http://www.flashrealtime.com/basics-of-p2p-in-flash/

RTMFP FAQ:http://www.scribd.com/doc/3798516/Flash-Player-10-RTMFP-FAQ-070208



[教學]使用Subclipse做Flex版本控管 Part2

0 意見

繼上篇介紹過Subclipse安裝之後,接著介紹如何使用Subclipse開設新專案

筆者這次測試是用Google code的專案代管,這是Google所提供的免費空間,有1G的容量且支援SVN。

首先切換Perspective,在window -> Perspective -> Other 下找到瀏覽SVN檔案庫

接著在檔案庫上按右鍵選新增 -> 檔案庫位置,輸入SVN位置

新增好後會要求名稱及密碼,都輸入完後回到Flex Perspective

接著到要同步的專案,在專案上點右鍵,選擇 team -> share project,更新類型為SVN,接著選剛設好的SVN位置點下一步

2009-08-17_195721.png

這個步驟是匯入目前專案到SVN,但還沒真的更新,匯完後先把要加入SVN的檔案用右鍵 team -> add加入

2009-08-17_200529.png

這樣也還沒更新到伺服器,最後選team -> 送出才會上傳,上傳後可以試著改改看文件再上傳一次,我們來測試回復的動作

在文件檔點右鍵選team ->顯示資源歷程可看到文件更新歷史,這裡會顯示版本、日期及註解,點選要回復的版本按取回

2009-08-17_201304.png

顯示資源歷程也可以比較版本差異,SVN還有許多功能,筆者才剛試不久還沒摸熟,如果有什麼心得或意見也歡迎留言 :D



[教學]使用Subclipse做Flex版本控管 Part1

0 意見

Subclipse是給Eclipse的Subversion(SVN) Plug-in,所以基於Eclipse的Flex也能安裝,版本控管的好處在於在多人開發時能妥善分配權限,且資料集中在伺服器,不必憺心個人保管的問題,即使不小心修改錯了,SVN也能回溯先前的版本,保持專案正常運作,這部分的控管在大型專案很常見,但個人開發的Library也可用SVN做版本控管,以下做個簡單教學。

1.下載並安裝Subclipse

使用Help -> software updates -> find and install -> new remote site,輸入以下網址安裝,由於Flex的Eclipse是3.3版,所以可裝1.4及1.6,筆者這次的範例是裝1.6版。

subclipse 1.6.x:http://subclipse.tigris.org/update_1.6.x

subclipse 1.4.x:http://subclipse.tigris.org/update_1.4.x

官網的安裝教學:http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA

有些功能需要別的Plug-in支援,沒有的話可以取消勾選

2009-08-14_192957.png

2.使用Subclipse取回專案

先開啟SVN伺服器專案,使用File -> new -> other找到SVN,選自SVN取回專案

筆者這次是測試,所以先抓了Papervision3D的SVN做範例,另外有沒有人注意到,Subclipse很貼心的提供中文語系,雖然不完整,但看起來很有親切感。

2009-08-14_193748.png

取回trunk後放到本地的專案上,接下來的操作就跟一般一樣,要更新或送出只要按右鍵選Team即可

2009-08-14_194609.png

筆者當然沒有權限修改Papervison3D,所以只能更新,自己架設伺服器就可使用送交,把新版本送上伺服器。

這次範例只示範了安裝及取回,下一篇再來介紹使用Subclipse開設新專案



[心得]使用Flash 操作 PDF

0 意見

最近剛好有用到,把心得整理一下

一、使用Flash顯示PDF:

Flash可透過HTMLLoader直接顯示PDF,而Flex則可用HTML Tag,這兩者都是用瀏覽器嵌入的方式呈現,效果跟Firefox、IE直接打開PDF一樣,雖然能顯示PDF,但Flash的渲染邏輯跟想像的不同,顯示的PDF文件會被置於最上層,跟Flash Index無關,且無法操作PDF文件,有一種比較特殊的作法是Cross-Scripting,透過Flash -> DOM -> PDF -> Javascript的方式操作,HTMLLoader讀取嵌入PDF的網頁,透過DOM操作PDF內的JavaScript,這種做法很麻煩而且PDF必須事先埋JavaScript,有興趣的朋友可參考Cross-Scripting PDF一文。

剛談論的HTMLLoader跟HTML都只能在AIR中使用,也就是Flash並沒有給Web顯示PDF的方法,雖說如此,網路上還是有看到有人用Flash做PDF Viewer(豆丁網),這部分可能是使用PDF轉SWF的技術,由於PDF文件格式是公開的,所以網路上有很多第三方的Parser,其中一種就是PDF轉向量SWF檔,這種技術的好處是可完整操作,且也能去掉一些文件屬性,像是Navigate tag跟Page Layout等..,讓顯示不受文件影響。

補充一些線上的PDF轉換網站:

PDF Online:http://www.pdfonline.com/convert-pdf/

PDF Convert:http://www.freepdfconvert.com/

PDFMenot:http://pdfmenot.com/

二、使用Flash產生PDF

有個好用的第三方Library─AlivePDF,這是改自PHP的FPDF,可產生文字及圖片,功能很完整但不支援中文 ,該作者也有注意到這個問題,期待他的更新版

logo.jpg

AlivePDF:http://www.alivepdf.org/

三、使用Flash解析PDF

Parser的部分比較少,筆者只找到Pavo這個由日本人撰寫的Parser,只能取出PDF的資訊及內文,無法取出圖片,重點是沒什麼教學,且裡面有用到File、FileStream等AIR才有的Class,所以這個Parser也只能給AIR使用。

Pavo:http://code.google.com/p/pavo/



AStar路徑演算法初探

2 意見

A*是著名的尋路演算法,在即時戰略遊戲很常見,主要是用來找出最短路徑,筆者參考Patrick Lester的A* Pathfinding for Beginners一文,試著用Actionscript3實作A*,為了加快效能,全部改用Vector取代Array,所以以下範例請用Flash Player10以上版本觀看。

先簡單說明一下A*的邏輯,A*是藉由評分制來取得最短路徑,有三個參考值F、H、G,F是H跟G的總合,最後拿來參考用,而G是由起點到目前位置所需的移動耗費,也就是移動距離參考,而H比較特殊,這是一種啟發式的預測,估算目前位置到終點所需的移動量,H有很多種算法,這次的範例是採用最簡單的Manhattan演算法,直線且不考慮障礙物

第一個範例把評分列出,黃色區塊為算出的最短路徑,而淺藍色區塊為有運算過的節點,按下空白鍵可切換四方向及八方向移動

2009-10-05_011918.png

觀看範例

套用PV3D,這樣感覺就比較像遊戲了,如果加上移動限制及回合,就能做出SLG戰略遊戲的效果,下次再寫個範例試試

2009-10-05_011951.png

觀看範例

原始檔下載

AStar類別



體驗更強大的AIR:Merapi

0 意見

2009-06-30_181631.jpg

Merapi能實現AIR與Java溝通,讓AIR可以透過Java去存取USB、Bluetooth、GPS..等AIR不支援的IO設備,或是直接執行本機檔案、開啟目錄等...。或許有人會質疑,既然都要透過Java了,那不如用Java開發就好,何必使用AIR?其實就以UI開發來講,Flash是非常方便的工具,尤其是Flex的mxml,基本上就是為了UI所設計的語言,強大的排版能力、多樣的特效及CSS的概念等都是使用AIR開發的好處。

附上教學影片及網站給大家參考:

官網:http://www.merapiproject.net/

教學:http://playground.deju.nu/2009/04/getting-started-with-merapi/



MVC Framework總整理

4 意見

接觸MVC Framework半年多了,把之前的筆記做個整理,希望能對想學Framework的朋友有幫助

一、Cairngorm:

Cairngorm是官方的MVC框架,有完整文件及教學, 事件驅動及能使用Flex特有的data binding跟state,不過資料管理過度集中,存取的資料只給ModelLocator管,在較大一點的專案會變很亂。

範例教學:http://waterxbread.blogspot.com/2009/03/micro-architecture-cairngorm.html

二、PureMVC:

PureMVC為獨立的事件驅動架構, 支援多語言(C#、Java、PHP…),雖然相容性高,但並未使用到Flex的好處,在大型專案裡類別會多到赫人(不過修改功能很容易)。 使用Code-Behind寫法(Mediator),UI跟程式分開,在Module溝通上也有許多好用的Utils

PureMVC範例教學 Part1:http://waterxbread.blogspot.com/2009/03/micro-architecture-puremvc-part1.html

PureMVC範例教學 Part2:http://waterxbread.blogspot.com/2009/03/micro-architecture-puremvc-part2.html

PureMVC Util,使用Pipes實現Module溝通:http://waterxbread.blogspot.com/2009/03/puremvc-pipes-util-module.html

PureMVC Util,使用Fabrication與Module溝通::

http://waterxbread.blogspot.com/2009/04/puremvcfabricationmodule.html

三、Mate:

Mate 一樣為事件驅動架構, 使用標籤語法,跟Cairngorm一樣能使用data binding,並簡化了端溝通(RemoteObjectInvoker、HTTPServiceInvoker...),撰寫上比較簡單,且依賴注入的特性,可不破壞原架構加入功能

Mate範例教學 Part1:http://waterxbread.blogspot.com/2009/06/mate-framework-part1.html

Mate範例教學 Part2:http://waterxbread.blogspot.com/2009/06/mate-framework-part2.html



[PV3D] ReflectionView

0 意見

又把小牛拿出來了,PV3D內附的反射效果,繼承自BasicView,可直接放置在舞台上,使用相當簡單

2009-06-24_183753.jpg

觀看範例

原始檔下載

有三個值可設定,surfaceHeight為ReflectionView內的Camera高度,viewportReflection是真正操作的反射Viewport,元件為Sprite,一樣可加Filter或其它設定,而setReflectionColor則可設定反射的ColorTransform

surfaceHeight = 0;
viewportReflection.filters = [new BlurFilter()];
setReflectionColor(.7, .7, .7);

要特別注意的是,一定要用SingleRender來Render場景,雖然是繼承BasicView,但反射的渲染只寫在SingleRender,StartRendering及onRenderTick只會渲染基本Viewport,不會有反射效果



[教學]Mate Framework Part2

0 意見

part1介紹過Mate架構跟流程,這次寫一個簡單範例來說明Mate的寫法

範例為使用DataGrid操作來自DataManager的資料。按此觀看範例

原始檔下載

2009-06-04_131314.jpg

Main.mxml

同上次的架構,程式的進入點是Main.mxml,裡面只要宣告EventMap、ModelMap跟要使用的UI

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
xmlns:maps="idv.gd.hellomate.maps.*"
xmlns:view="idv.gd.hellomate.views.*"
width="600" height="350">        
<mx:Style source="assets/style.css"/>
        
        <maps:MainEventMap/>
<maps:ModelMap/>
<view:DataList/>
</mx:Application>

DataList.mxml

DataList.mxml 為列表的UI,負責顯示、新增及刪除,在Mate架構中,UI的Domain Logic直接寫在mxml,或許會有點亂,但這種寫法也方便Mate做Data Binding

<!-- 部分程式碼 -->    
<!-- mate特有的Dispatcher,即使元件不在顯示列表或不可見,仍可送訊息給Mate -->
<mate:Dispatcher id="deleteAllDispatcher" 
generator="{ListEvent}"
type="{ListEvent.REMOVE_ALL}">
<!-- 可直接接收來自EventMap的回應 -->
<mate:ResponseHandler type="deleteItemResponse" response="Alert.show('ok')"/>
</mate:Dispatcher>

<!-- 能監聽自己內部跟Mate事件 -->
<mate:Listener type="{NavigationEvent.ADD_STATE}" receive="stateChangeHandler(event)"/>
<mate:Listener type="{NavigationEvent.LIST_STATE}" receive="stateChangeHandler(event)"/>
 <mx:DataGrid id="myDG" 
x="10" y="10" 
width="560" height="215"
dataProvider="{currentListAC}">
<mx:columns>
<mx:DataGridColumn headerText="標題" dataField="title"/>
<mx:DataGridColumn headerText="訊息" dataField="message"/>
</mx:columns>
</mx:DataGrid>

事件可由Mate的Dispatcher送出,也可使用原本的EventDispatcher,但事件的bubbles一定要為true,而<listener>的標籤可以聽到來自Mate的事件,但自己Bubbles上來的事件也會聽到,在設計時要注意

三種在Mate中傳事件的寫法:

一、使用<Dispatcher>:<mate:Dispatcher id="deleteAllDispatcher" generator="{ListEvent}" type="{ListEvent.REMOVE_ALL}">,用調用時呼叫 deleteAllDispatcher.generateEvent();

二、使用原生的EventDispatcher:this.dispatchEvent(new NavigationEvent(NavigationEvent.ADD_STATE));,由於事件bubble為true,EventMap可聽到事件

三、使用程式碼的Mate Dispatcher: var mateDispatcher:Dispatcher = new Dispatcher(); mateDispatcher.dispatchEvent(listEvent);

ListEvent.as

自定事件,寫法同一般Flash事件寫法,但為避免混淆,Mate建議在事件的常數後加上Class名,好讓事件不會重覆

public class ListEvent extends Event
{
//常數後加上Class名,避免名稱重覆
public static const DELETE:String = "deleteListEvent";
public static const REMOVE_ALL:String = "removeAllListEvent";
public static const ADD:String = "addListEvent";

public var item:ItemInfo;

//bubbles要為true,給EventMap聽
public function ListEvent(type:String, bubbles:Boolean = true, cancelables:Boolean = false, item:ItemInfo = null)
{
super(type, bubbles, cancelables);
this.item = item;
}

override public function clone():Event
{
return new ListEvent(type, bubbles, cancelable, item);
}
}

DataManager.mxml

為管理列表資料的Manager

        public class DataManager
{
public var listArrayCollection:ArrayCollection;

public function DataManager()
{
listArrayCollection = new ArrayCollection();
listArrayCollection.addItem(new ItemInfo("first item", "hello mate"));
listArrayCollection.addItem(new ItemInfo("second item", "test"));
}

public function deleteItem(item:ItemInfo):void
{
if (listArrayCollection)
listArrayCollection.removeItemAt(listArrayCollection.getItemIndex(item));
}

public function deleteAllItem():void
{
if (listArrayCollection)
listArrayCollection.removeAll();
}

public function addItem(item:ItemInfo):void
{
if (listArrayCollection)
listArrayCollection.addItem(item);
}
}

DataManager封裝了資料操作,這裡只外露一個listArrayCollection給外部View使用,也可把ModelManager做為資料物件跟View挷定,但要記得要給class設[Bindable],或自定Binding事件

MainEventMap.mxml

為Mate事件的中心,用以管理事件及專案的Business Logic

<?xml version="1.0" encoding="utf-8"?>
<EventMap xmlns="http://mate.asfusion.com/" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import idv.gd.hellomate.events.*;
import idv.gd.hellomate.business.DataManager;
]]>
</mx:Script>

<!-- 監聽Mate事件,可呼叫Manager執行方法(Manager只會被生成一次)-->
<EventHandlers type="{ListEvent.DELETE}">
<MethodInvoker generator="{DataManager}" method="deleteItem" arguments="{event.item}"/>
</EventHandlers>

<EventHandlers type="{ListEvent.REMOVE_ALL}">
<MethodInvoker generator="{DataManager}" method="deleteAllItem"/>
<!-- 回應訊息給呼叫者 --> 
<ResponseAnnouncer type="deleteItemResponse"/>
</EventHandlers>

<EventHandlers type="{ListEvent.ADD}">
<MethodInvoker generator="{DataManager}" method="addItem" arguments="{event.item}"/>
<!-- 發送Navigation事件 -->
<EventAnnouncer generator="{NavigationEvent}" type="{NavigationEvent.LIST_STATE}" />
</EventHandlers>

其中<EventHandlers>的標籤為註冊Event要觸發的事件,這裡能調用ModelManager的方法,並可直接回傳內容(<ResponseAnnouncer>)或是呼叫事件(<EventAnnouncer>)

ModelMap.mxml

<?xml version="1.0" encoding="utf-8"?>
<EventMap xmlns="http://mate.asfusion.com/" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import idv.gd.hellomate.views.DataList;
import idv.gd.hellomate.business.DataManager;
]]>
</mx:Script>

<!-- 注入資料,DataList生成時自動注入 -->
<Injectors target="{DataList}" debug="true">
<PropertyInjector targetKey="currentListAC" source="{DataManager}" sourceKey="listArrayCollection"/>
</Injectors>
</EventMap>

ModelMap.mxml底層其實是EventMap,這裡分出來只是為了釐清架構。其中<Injectors>是很特殊的標籤,會在目標元件生成時自動把資料注入,且若是Bindable物件,之後就可靠物件自己更新,在寫法上很方便。

總結

這次只寫個簡單範例練習,由於Mate可用Data Binding,在寫法上會比PureMVC好寫很多,但實際上使用還是要看專案的複雜度,沒有人說那個MVC Framework是最好的,端看開發人員習慣那種架構。

這次的練習不夠完整,如果寫法或概念有錯還請指正,謝謝



[教學]Mate Framework Part1

0 意見

2009-06-03_130504.jpg

Mate是給Flex開發的Framework,跟Cairngorm一樣只能在Flex下運作,比較特別的是Mata以mxml標籤撰寫,特有的EventMap跟Injector可在不破壞原架構的情況下注入行為,屬於非侵入式的框架。

一、架構

2009-06-04_131314.jpg

官網並沒有特別解釋要分成那幾類,這是按照官網範例的分類法,給大家參考

business:放置資料管理的ModelManager

events:放置自定事件

maps:放置EventMap跟ModelMap,Mate的主要核心

views:放置要顯示的UI Component

vos:放置Value Object

最外層為程式的進入點(Main.mxml)

二、流程

官網有完整的流程圖,這裡只挑幾個筆者覺得常用到的來講

先看一下mate的雙向流程圖

two_ways.png

如上圖,View透過事件驅動EventMap,在Mate裡所有的事件Bubble要設為true,讓上層元件可聽到事件,EventMap就是用來集中管理事件的地方,透過EventMap可呼叫要存取的網路服務或Manager,且可使用ResponseAnnouncer回傳訊息給呼叫者,不必再特別調用事件,當然想調用事件也可以,使用Mate的EventAnnouncer,可通知給對事件給感興趣的View。

使用Mate Adapter

model_adapter.png

除了使用EventAnnouncer及ResponseAnnouncer回應訊息外,還可透過ModelManager自動更新給View,這裡就要用到Flex的強項:DataBinding,我們可在程式初始時挷定View跟ModelManager的Bindable資料(例如ArrayCollection),在透過EventMap改變ModelManager時,由於是DataBinding,我們可不用送事件給View,Binding會自動送PropertyChange事件,一些Flex元件(像DataGrid)會自己更新,簡化了原本MVC煩雜的訊息溝通,這也是使用Mate的好處。

第一部分先簡單介紹架構與流程,下一篇會使用範例來說明,如果大家對Mate的流程感興趣,可參考Kenshin's Flex BlogMate教學

Mate官網:http://mate.asfusion.com/

教學文件:http://mate.asfusion.com/page/documentation

API DOC:http://mate.asfusion.com/api_docs/



Gaia Frameowrk

0 意見

2009-05-19_125947.jpg

Gaia是給Flash開發的Framework,不像PureMVC或Cairngorm的MVC架構(Model、View、Controller),反是提供Flash骨架生成,可快速製作Flash-base網站,利用site.xml管理所有頁面及架構,條列清楚且容易修改,且直接支援SWFAddress、SWFObject,能自動生成deeplink及SEO(Search Engine Optimization),對常接觸Flash網站開發的設計師來說,Gaia絕對是好用的工具。

備註:Gaia是給Flash IDE的擴充元件,需使用Extension Manager安裝,請參考官網教學

2009-05-19_125910.jpg

Gaia site:http://www.gaiaflashframework.com/

Demo:http://www.tmrw.co.uk/blog/gaia-framework-demo-site/



ThunderBolt 輕量級的Logging Framework

0 意見

2009-05-14_130158.jpg

上次有介紹過Flex的Logging Framework,這次來介紹ThunderBolt,ThunderBolt是第三方的Logging framework,使用簡單且相容於Flash、Flex及AIR,顯示的方式是透過FireBug(Firefox add-on),在AIR的環境則是透過ThunderBoltAS3Console顯示(AIR檔,可擷取flashlog.txt文件,平常也可以用來追蹤trace),且本身有支援Flex的LoggerTarget,簡單來說,我們能把Flex的TraceTarget換成ThunderBoltTarget,讓Flex Log顯示在FireBug上。

語法請參照:

AS3:http://code.google.com/p/flash-thunderbolt/wiki/ThunderBoltAS3

AS2:http://code.google.com/p/flash-thunderbolt/wiki/ThunderBoltAS2

Google Code:http://code.google.com/p/flash-thunderbolt/

WS-Blog:http://www.websector.de/blog/category/thunderbolt/



[教學] Flex Logging Framework

1 意見

介紹一個Flex提供的Logging framework,這是原生的功能,API可在mx.logging下找到,用起來跟trace差不多,最大的不同是Logging有分成以下五層:

  1. DEBUG:紀錄Flex內部活動。這在應用程式除錯時最為有用
  2. INFO:紀錄一般資訊
  3. WARN:當應用程式遇到問題時紀錄訊息。這些問題不造成應用程式停止運作,但可能會導致近一步的錯誤
  4. ERROR:當重要的服務無法使用,或是限制應用程式的使用的狀況發生時加以紀錄
  5. FATAL:當導致應用程式失敗的事件發生時加以記錄

愈高層的資訊愈完整,例如WARN就包含WARN、ERROR跟FATAL,而FATAL就只會顯示FATAL

程式範例

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="main();">
<mx:Script>
<![CDATA[
import mx.logging.ILogger;
import mx.logging.Log;
import mx.logging.targets.TraceTarget;
import mx.logging.LogEventLevel;

private function main():void
{
initLogging();
}

private function initLogging():void
{
var logTarget:TraceTarget = new TraceTarget();
var myLogger:ILogger = Log.getLogger("idv.gd.project.MyClass");

var myLogger2:ILogger = Log.getLogger("idv.gd.project.MyClass2");

logTarget.filters = ["idv.gd.project.*"];

//指定要聽 level
logTarget.level = LogEventLevel.ALL;

//開啟顯示資訊
logTarget.includeLevel = true;
logTarget.includeCategory = true;
logTarget.includeDate = true;
logTarget.includeTime = true;

//將Target加入Log
Log.addTarget(logTarget);

//logger送出訊息,由低至高,高層會顯示低層資訊(error: error & fatal)
myLogger.debug("myLogger debug");
myLogger.fatal("myLogger fatal");

myLogger2.info("myLogger2 init");
}

]]>
</mx:Script>
</mx:Application>

首先使用靜態方法取得ILogger,getLogger(Category),Category是用來過濾用,一般的命名原則同package,雖然亂取也可以但自己別搞混了,再來指定要顯示的LogTarget,預設是提供traceTarget,也可自己改寫,像是寫一個能記錄在文字檔或是回傳給伺服器的都行,接著給logTarget指定filter,filter用來過濾要聽的Category Name,預設為全都聽,可用*字元,比較特殊的是Logging會拆解格式,寫idv.gd.project.MyClass就只會聽到MyClass,而idv.gd.project.*則聽的到MyClass、MyClass2,另外,TraceTarget也可指定要顯示的資訊,包含Level、Date、Time、Category,指定完後記得加給Log

最後在要顯示資訊的地方用Logger指定Level即可,可設定要顯示的內容,時間Logging會自動加上



AS3 Performance

0 意見

之前在7yue's weblog看到的文章,可做為開發時的參考

2009-05-06_130224.jpg

單元測試:http://www.gskinner.com/blog/archives/2009/04/as3_performance.html

看完的結論就是drawPath跟vector確實可改善效能,而Array則不管型別都一樣慢,不過令人在意的是Static Explicit,在MVC的架構很常用呢