搜尋部落格文章

2011年11月28日 星期一

正則表達式 正規表達式

1、正則表達式的概念
正則表達式是用來描述字符串特徵的標準方式。
正則表達式由兩個部分組成:一部分由雙斜杠來標示字符串起始位置,這部分叫匹配模式,用來描述字符串特徵的;另一部分是在第二個斜杠後面的字母,叫做正則表達式的標誌位,是gimsx這五個字母的組合。
例如:var zfc: RegExp=/hello/g;
正則表達式還可以使用正則表達式類的構造函數來生成一個正則表達式實例。
例如:var zfc: RegExp=new RegExp(“hello”,”g”);
可以看出正則表達式的構造函數只不過是將匹配模式和標誌位分開成兩個字符串,當成參數,來生成正則表達式的實例。標誌位是可選參數,如果有為空或者不屬於”gimsx”的字母出現,那麼標誌位參數將被忽略。
使用構造函數生成正則表達式實例,要注意由於匹配模式作為String型,要注意相關的字符轉義,比如單引號和雙引號。


2、正則表達式的引擎機制
AS3使用功能強大的NFA引擎,NFA引擎是一種Greedy的執行方式,一旦找到匹配立刻返回,不管後面是否還有匹配的字符,最先返回最左邊的匹配。


3、正則表達式語法
①正則表達式中的文字符號
由文字符號組成的正則表達式是最簡單的類型,文字符號包括字母、符號和單詞。中文也屬於文字符號,它是用Unicode碼表示的。
文字符號分為3種,即普通文字和符號、元字符和不可見字符。但是,如果使用正則表達式構造函數來匹配正斜杠的話,就不需要轉義了,但不可見字符還是需要轉義的。

②正則表達式中的字符集
字符集是指由中括號裡定義的字符集合。字符集中的字符只要有一個符合特徵描述,那麼就會被認為匹配。字符集只能匹配一個字符。
在字符集中我們可以使用連字符“ - ”來定義一個範圍。3個常用的字符集[AZ]、[az]、[0-9]
取反符號(^)在字符集中的作用是對方括號裡面的字符集取反。即使用了取反符號,只要是不符合字符集描述的字符就符合匹配。
字符集中需要轉義的特殊字符。我們只需對正則表達式字符集元字符中的“ [\^- ”進行轉義。

③特殊的點號(.)
正則表達式中用“.”號來表示任何字符。但“.”號不匹配換行符(\n)。AS3提供一個單行模式標誌符(s)來讓“.”號匹配換行符。

④選擇符(|)
選擇符“|”表示選擇,用來匹配多個可能的正則表達式中的一個。

⑤括號與分組
用圓括號將表達式的一部分括起來,就會將這部分錶達式定義成組。組將被當成一個整體來進行操作。這樣的操作,被稱為分組。
分組一般有如下應用:
● 用來限定選擇符的作用範圍。
● 可以指定括號中的內容重複次數。

⑥用正則表達式描述字符串的重複
顯式限定符是使用花括號{}及其中的數字值表示模式出現次數的上下限的方式。除了顯式限定符,還有非顯式限定符。
如果限定符前面是跟著字符集,那麼就限定符合字符集描述的特徵字符重複次數。
如果限定符前面是跟著組,那麼就限定符合組內表達式描述的特徵字符串重複次數。

⑦正則表達式定位符及其含義
“ ^ ”匹配輸入字符串的開始位置
“ $ ”匹配輸入字符串的結束位置
“ \b ” 匹配一個單詞邊界,也就是指單詞和空格間的位置
“ \B ” 匹配非單詞邊界

⑧正則表達式的5個標誌位
“ g ” global 匹配多個
“ i ” ignoreCase不區分大小寫
“ m ” multiline 設置此標誌後,$和^可以分別匹配行的開頭和結尾
“ s ” dotall 設置此標誌後,“ . ”點號可以匹配換行符(\n)
“ x ” extended 允許擴展的正則表達式

⑨正則表達式中元字符優先級
相同優先級總左到右,不同優先級先高後低。
元字符優先級如下:
\
(), (?:), (?=), []
+, ?.,{n},{n,},{n,m}
^,$,\字符
|

2011年11月12日 星期六

[轉] AS3使用URLRequest和URLLoader與伺服器溝通

AS3 中使用URLLoader 與URLRequest 取代了先前版本LoadVars 方法. 初學者可能又會迷糊了.
在現在幫助系統沒有完善的情況下(Flash 9 沒有幫助, Flex Builder 2 的只有英文), 這裡寫篇簡單的教程, 方便大家往AS3 過渡.

在AS3 中, 有關於網路操作的內置類全部在flash.net 裡. 下面是本教程要用到的類的清單 :

URLLoader : 用於從網路或者本地讀取文件, 可以通過設置他的dataFormat 屬性改變收到的文本類型.
與AS2 的LoadVars 不同的是, 他的默認值URLLoaderDataFormat.TEXT 即純文字格式, 所以在讀取外部文本變量的時候得修改一下他的dataFormat 為URLLoaderDataFormat.VARIABLES. 不過在AS2 中沒有該屬性, 取代的是contentType 屬性.

URLRequest : 用於傳遞變量到伺服器, 以及URLLoader 要load 的目標路徑. 可以通過設置他的contentType 屬性改變發送到伺服器的變量類型, 默認是application/x-form-urlencoding, 也就是URLEncode 編碼.

URLVariables : 用於配置傳遞到伺服器變量的鍵/ 值集合, 如user1=Kakera&user2=Eigo.

URLLoaderDataFormat : 用於設置URLLoader 讀取文件的類型, 有TEXT (純文字), VARIABLES (URLEncoding 的鍵/ 值集合), BINARY (2 進制格式), URLLoader 會根據相應的類型進行解碼操作, 如解碼URLEncode

同時還有其他不常用的 :
URLRequestMethod : 決定使用哪種方式傳遞數據到伺服器, POST 或者GET.
URLReqeustHeader : 用於配置傳遞到服務端的HTTP 標頭.

值得一提的是, URLLoader 還有相當完整的事件讓我們來獲取讀取數據的狀態, 下面是有關URLLoader 事件的清單.

complete : 使用URLLoader.load() 方法後, 數據完全加載完畢時觸發, 通常如果能夠觸發這個事件的話, 說明你的程序沒有問題.

httpStatus : 使用URLLoader.load() 方法後, 獲取HTTP 狀態代碼時觸發, 通過判斷他的state 屬性我們可以獲得遠程文件的加載狀態. 成功(200), 沒有權限(403), 找不到文件( 404), 伺服器內部錯誤(500) 等等. 這個事件總是在compelete 之前被觸發.

ioError : 使用URLLoader.load() 方法時, 發生致命錯誤時觸發, 我還沒碰到過..

open : 使用URLLoader.load() 方法後, 開始從伺服器下載數據時觸發一次, 此時的URLLoader.bytesLoaded 一定是0.

progress : 使用URLLoader.load() 方法後, 在從伺服器下載數據的過程中持續觸發, 通過偵聽他的變化我們可以很方便的為URLLoader 做加載狀態的顯示.

securityError : FlashPlayer 的安全錯誤, 比如跨域加載, 從硬盤(文件系統) 發送/ 讀取伺服器上的數據.

關於註冊偵聽器的建議

flashplayer 內置類的所有事件都有相關事件類常量來表示, 推薦使用他們來註冊事件偵聽器. 而所有的內置類的事件類(Event) 全部在flash.events 包中,如使用:
window.attachEvent("onload",function (){AutoSizeDIV('CODE_7643')}) import flash.events.Event;
urlLoaderInstance.addEventListener(Event.COMPLETE, completeHandler);



來代替
urlLoaderInstance.addEventListener("complete", completeHandler);下面是URLLoader 支持的事件所對應類的清單, 他們可以在Flex Builder 2 的文檔中找到:

complete : Event.COMPLETE
httpStatus : HTTPStatusEvent.HTTP_STATUS
ioError : IOErrorEvent.IO_ERROR
open : Event.OPEN
progress : ProgressEvent.PROGRESS
securityError : SecurityErrorEvent.SECURITY_ERROR

然後下面是使用URLLoader 的一些簡單的例子

1. 單純的讀取伺服器或者硬盤上同目錄下叫Variables.txt 文本文件, 文本的內容是:
user1=Kakera&user2=Eigo&user3=KeiragoLoadVariablesOnly.fla
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLLoaderDataFormat;
import flash.net.URLVariables;
import flash.events.Event;
import flash.events.HTTPStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;


//
// 配置 URLRequest, 設置目標路徑等
//

var request:URLRequest = new URLRequest("Variables.txt");
/
// 配置 URLLoader, 註冊偵聽器等
//

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, loader_complete);
loader.addEventListener(Event.OPEN, loader_open);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, loader_httpStatus);
loader.addEventListener(ProgressEvent.PROGRESS, loader_progress);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_security);
loader.addEventListener(IOErrorEvent.IO_ERROR, loader_ioError);
loader.load(request);

function loader_complete (e:Event):void {
 trace("Event.COMPLETE");
 trace("目標文件的原始數據(純文字) : " + loader.data);
 //
 // 使用URLVariables 處理原始數據並進行遍歷同時輸出數據
 //
 
 var variables:URLVariables = new URLVariables(loader.data);
 for (var i in variables) {
  trace(i + " : " + variables[i]);
 }

}
function loader_open (e:Event):void {
 trace("Event.OPEN");
 trace("讀取了的字節: " + loader.bytesLoaded);
}
function loader_httpStatus (e:HTTPStatusEvent):void {
 trace("HTTPStatusEvent.HTTP_STATUS");
 trace("HTTP 狀態代碼 : " + e.state);
}
function loader_progress (e:ProgressEvent):void {
 trace("ProgressEvent.PROGRESS");
 trace("讀取了的字節: " + loader.bytesLoaded);
 trace("文件總字節 : " + loader.bytesTotal);
}
function loader_security (e:Secu​​rityErrorEvent):void {
 trace("SecurityErrorEvent.SECURITY_ERROR");
}
function loader_ioError (e:IOErrorEvent):void {
 trace("IOErrorEvent.IO_ERROR");
}






2. 提交數據到ServerSide.asp, 並輸出伺服器的返回值

ServerSide.asp <%@LANGUAGE="Jscrīpt" CODEPAGE="65001"%>
<%  //  // 全局 Header, 設置編碼, 以及緩存  //  with (Response) {   Charset = "utf-8";   Buffer = true;   Expires = -10;   ContentType = "text/plain";  }    var buffer = "列出所有服務端接收到的變量: /n";  var i;  var e = new Enumerator(Request.Form);      //  // 遍歷集合  //    for (; !e.atEnd(); e.moveNext()) {   i = e.item();   buffer += String(i) + " : " + String(Request.Form(i)) + "/n";  }    Response.Write(buffer); %>

SendAndLoadVariables.fla

import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLLoaderDataFormat;
import flash.net.URLVariables;
import flash.events.Event;
import flash.events.HTTPStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;


//
// 配置URLVariables, 設置傳遞到伺服器的數據
//
 
var variables:URLVariables = new URLVariables();
variables.userName = "Kakera";
variables.password = "********";


//
// 配置URLRequest, 設置目標路徑, 設置提交的數據, 方法(POST / GET)
//

var request:URLRequest = new URLRequest("http://localhost/urlloadersample/ServerSide.asp");
request.data = variables;
request.method = URLRequestMethod.POST;


//
// 配置 URLLoader, 註冊偵聽器等
//

var loader:URLLoader = new URLLoader();


//
// 服務端將要返回的是純文字數據
//

loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.addEventListener(Event.COMPLETE, loader_complete);
loader.addEventListener(Event.OPEN, loader_open);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, loader_httpStatus);
loader.addEventListener(ProgressEvent.PROGRESS, loader_progress);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_security);
loader.addEventListener(IOErrorEvent.IO_ERROR, loader_ioError);
loader.load(request);

function loader_complete (e:Event):void {
 trace("Event.COMPLETE");
 trace("目標文件的原始數據(純文字) : /n" + loader.data);
}
function loader_open (e:Event):void {
 trace("Event.OPEN");
 trace("讀取了的字節: " + loader.bytesLoaded);
}
function loader_httpStatus (e:HTTPStatusEvent):void {
 trace("HTTPStatusEvent.HTTP_STATUS");
 trace("HTTP 狀態代碼 : " + e.status);
}
function loader_progress (e:ProgressEvent):void {
 trace("ProgressEvent.PROGRESS");
 trace("讀取了的字節: " + loader.bytesLoaded);
 trace("文件總字節 : " + loader.bytesTotal);
}
function loader_security (e:Secu​​rityErrorEvent):void {
 trace("SecurityErrorEvent.SECURITY_ERROR");
}
function loader_ioError (e:IOErrorEvent):void {
 trace("IOErrorEvent.IO_ERROR");

}

原文連結

使用Loader類別載入外部共享元件庫swf檔

隨著元件增加,以及內嵌字型,導致fla檔體積越來越大
不僅發佈swf耗費很長的時間,過大的檔案也可能影響著伺服器的流量
為了可以更有效率的工作,
首先,先將下述幾樣檔案拉到外部swf中,

製作上使用的檔案類型不外乎就是
1. 圖片
2. 音樂音效
3. 字型

可以的話,最好是一個一個分類
例如:紙娃娃衣物,家具,壁紙,地磚.音樂.字型...
未來若有增加新的物品,就可以單獨增加額外的swf作載入,若有修改某幾樣物品,則修改相對的swf檔案即可


專案初期只對Loader所載入的東西去抓取裡面的Class,

this.loader.contentLoaderInfo.addEventListener(Event.COMPLETE,eventComp);
private function eventComp(e:Event):void{
  (e.currentTarget as LoaderInfo).applicationDomain.getDefinition("className");
}

後來加入preloader後,所有的外部swf在這個時候就要先載入了
載入後使用原本的方法便會抓不到外部元件
解決方法可以在loader.load(request:URLRequest, context:LoaderContext = null);
給loader指定第二個參數context:LoaderContext

var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/photo11.jpg"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);


LoaderContext 類別包括三個屬性,可以讓您定義如何使用載入內容的環境:

checkPolicyFile:

請只在載入影像檔 (而不是 SWF 檔) 時使用這個屬性。如果將這個屬性設定為 true,Loader 會檢查原則檔的原始伺服器 。只有在內容不是源自包含 Loader 物件的 SWF 檔時,才需要執行這項步驟。如果伺服器授予 Loader 網域權限,Loader 網域中 SWF 檔的 ActionScript 就可以存取已載入影像中的資料;換句話說,您可以使用 BitmapData.draw() 命令,存取載入影像中的資料。

請注意,來自 Loader 物件以外網域的 SWF 檔可以呼叫 Security.allowDomain(),以允許特定網域。

securityDomain:

請只在載入 SWF 檔 (而不是影像) 時使用這個屬性。為不是源自包含 Loader 物件之檔案所屬網域的 SWF 檔指定這個方法。指定這個選項時,Flash Player 會檢查是否有原則檔,如果有,則來自跨網域原則檔中所允許網域的 SWF 檔就可以對載入的 SWF 內容進行跨 Script 處理。您可以將這個參數設定為 flash.system.SecurityDomain.currentDomain。

applicationDomain:

請只在載入以 ActionScript 3.0 撰寫的 SWF 檔 (而非影像或以 ActionScript 1.0 或 2.0
撰寫的 SWF 檔) 時使用此屬性。載入檔案時,您可以透過將 applicationDomain 參數設定為 flash.system.ApplicationDomain.currentDomain,指定檔案要包含在與 Loader 物件相同的應用程式網域中。藉由將載入的 SWF 檔置於相同的應用程式網域中,便可以直接存取其類別。如果您要載入的是包含內嵌媒體 (可以透過它們的相關類別名稱進行存取) 的 SWF 檔,這種做法就很有用。

2011年11月2日 星期三

Flash 音檔匯出原則

在 Flash 文件中匯出聲音時的幾個原則

除了取樣頻率和壓縮方式之外,還有幾種方法可以有效地在文件中使用聲音,並降低檔案大小:

設定淡入點和淡出點,防止無聲區域儲存在 Flash Pro 檔案中,並減少檔案中聲音資料的大小。

若要更有效地利用相同的聲音,請在不同的關鍵影格上套用不同的聲音特效 (例如音量封套、循環和淡入/淡出點)。 您只需要使用一個聲音檔,就能得到好幾種聲音特效。

將簡短的聲音循環,做為背景音樂使用。

不要將串流聲音設為循環。

匯出內嵌在視訊片段中的音效時,請記住音效將使用您在「發佈設定」對話方塊中選取的全域串流設定,進行匯出。

在編輯程式中預覽動畫時,請使用串流同步,讓動畫能和音軌同步播放。 如果您的電腦速度不夠快,無法以和音軌同步的速度繪製出動畫影格,則 Flash Pro 會略過這些影格。

匯出 QuickTime 影片時,您可以盡情使用多種聲音和聲道,而不必擔心檔案大小的問題。 這是因為所有的聲音都會在您匯出為 QuickTime 檔案時,合併為單一的聲音音軌。 因此,您使用的聲音數目對於最終的檔案大小並不會造成影響。

Flash 音檔壓縮設定

如果您在「發佈設定」對話方塊中,為事件聲音或串流聲音選取全域壓縮設定,那麼就算您未在「聲音屬性」對話方塊中為這些聲音選取壓縮設定,這些設定還是會套用到個別的事件聲音或所有的串流聲音。

您也可以在「發佈設定」對話方塊中選取「覆蓋聲音設定」,來覆蓋您在「聲音屬性」對話方塊中指定的匯出設定。 如果您要製作供本機使用的高傳真音效檔案 (較大) 並用於 Web 的低傳真版本 (較小) 時,這個選項就非常有用。

壓縮的取樣頻率和取樣程度會在匯出 SWF 檔中形成明顯的聲音品質及聲音大小之差異。 壓縮聲音的程度愈高和取樣頻率愈低,檔案就會愈小,但品質也因而變得比較差。 您應該自行實驗,找出聲音品質和檔案大小之間的最佳平衡點。


ADPCM 和 Raw 壓縮選項

ADPCM 壓縮會為 8 位元或 16 位元聲音資料設定壓縮。 當您匯出簡短的事件聲音 (例如按一下按鈕) 時,請使用 ADPCM 設定。

Raw 壓縮會將聲音以未壓縮的方式匯出。

預先處理 當您選取「將立體聲轉換為單聲道」時,會將混合的立體聲聲音轉換為單聲道聲音,但是單聲道聲音則不會受此選項影響。

取樣頻率 控制聲音的精確度和檔案大小。 較低的頻率會降低檔案大小,但也會減損聲音品質。

頻率選項如下所示:

5 kHz 僅適用於語音。
11 kHz 為標準 CD 頻率的 1/4,對簡短的音樂片段而言,這是建議的最低品質。
22 kHz 為標準 CD 頻率的 1/2,對於要在網站上播放聲音而言,這是較普遍的選擇。
44 kHz 為標準 CD 音效頻率。
備註: Flash Pro 不能將匯入聲音的 kHz 頻率提高到超出匯入時的頻率。
ADPCM 位元 (僅適用於 ADPCM) 指定壓縮聲音時的位元深度。較高的位元深度可以產生較佳的聲音品質。


mp3 壓縮選項

MP3 壓縮 可讓您以 mp3 壓縮格式來匯出聲音。在匯出較長的串流聲音 (例如音樂音軌) 時,請使用 mp3。 若您即將匯出的檔案當初是以 mp3 格式匯入的,您可以使用和匯入時相同的設定將檔案匯出。

使用匯入的 mp3 品質 預設設定。 您可以取消選取此選項,以選取其他 mp3 壓縮設定。 選取此選項,便能以與匯入 mp3 檔案時的相同設定來匯出此檔案。

位元速率 決定匯出之聲音檔中每一秒的位元。 Flash Pro 支援 8 到 160 Kbps CBR (固定位元速率)。

匯出音樂時,請將位元速率設定為 16 Kbps 或更高,以取得最佳的效果。

預先處理 將混合的立體聲聲音轉換為單聲道聲音 (單聲道聲音則不會受此選項影響)。
備註: 只有在您選取了 20 Kbps 以上的位元比率時,才能使用「預先處理」選項。

品質 決定壓縮速度和聲音品質:

快速 以較快的速度進行壓縮,但聲音品質較低。
中 以較慢的速度進行壓縮,但聲音品質較高。
最佳 以最慢的速度進行壓縮,聲音品質最高。


語音壓縮選項

「語音」壓縮選項會使用適合語音的壓縮方式匯出聲音。備註: Flash Lite 1.0 和 Flash Lite 1.1 不支援使用「語音」壓縮選項。 針對這些播放程式版本所開發的內容,請使用 mp3、ADPCM 或 Raw 壓縮。

取樣頻率 控制聲音的精確度和檔案大小。 較低的頻率會降低檔案大小,但也可能減損聲音品質。
請選取下列其中一個選項:

5 kHz 適用於語音。
11 kHz 建議語音使用。
22 kHz 適用於大部分網站上所播放的音樂類型。
44 kHz 為標準 CD 音效頻率。 然而,因為套用了壓縮,SWF 檔中的聲音就無法達到 CD 品質。

Firefox 64bit

Firefox有64bit版,但只是永遠的alpha1及只有英文版,正式版可從來沒有出現過,
如果要正式版只有下載palemoon x64,雖然只是英文版,但只要安裝中文套件便可,但記著64bit瀏覽器不能使用32bit外掛程式,必須再獨立安裝64bit的外掛程式,但現在只有flash player及java有提供64bit的外掛程式。

Firefox 64bit 主程式 ftp://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/firefox-10.0a1.en-US.win64-x86_64.installer.exe

正體中文套件 ftp://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central-l10n/win32/xpi/firefox-10.0a1.zh-TW.langpack.xpi

Palemoon 7 x64 http://storage.sity.nl/palemoon/palemoon-7.0.1-x64-installer.exe

palemoon 7 中文套件 http://storage.sity.nl/palemoon/langpacks/7.x/zh-TW.xpi

flash player 64 http://aihdownload.adobe.com/bin/install_flashplayer11x64_mssd_aih.exe

Java 64 http://fs11.filehippo.com/9985/5a3e49a82ffb480c9edda8c6c5f379f2/jre-7u1-windows-x64.exe