blog.Ring.idv.tw

ActionScript

LoadVars vs. Flash Remoting

從標題「LoadVars vs. Flash Remoting」來看,我想這絕對夠直覺本文想要表達的是什麼~沒錯~ Flash可以藉由著許多種方式和後端程式溝通,尤其是採用loadVariables、LoadVars這種純文字(Plain Text)方式的傳輸最便利使用,然而它真的是純文字嗎?而Flash Remoting真的就是用binary format來傳輸嗎?

本文將藉由著Ethereal封包捕捉工具來協助我們探討底層的傳輸格式~

LoadVars - Plain Text

我們寫一個簡單的小範例來做測試~

Flash ActionScript

var data_lv:LoadVars = new LoadVars();
data_lv.name = "Flash";
data_lv.sendAndLoad("http://localhost/LoadVars.php",data_lv,"POST");
data_lv.onLoad = function(success)
{
	if(success)
	{
		trace("Loaded!");
		trace(this.value);
	}else{
		trace("Failed!");
	}
}

PHP (LoadVars.php)

<?php
	echo "&value=Hello! " . $_POST['name'];
?>

Ethereal捕捉請求封包(Plain Text)

Ethereal捕捉回應封包(Plain Text)

從上述所捕捉的封包很明確的,在請求時送出「name=Flash」,而在接收時則為「&value=Hello! Flash」,兩者的確都是採用純文字的方式來傳輸~

Flash Remoting - AMF3

Flash ActionScript

var myService = new NetConnection()
myService.connect("http://localhost/amfphp/gateway.php");
var responder = new Responder(onResult, onFault);
myService.call("Hello.sayHello", responder,"Java");
function onResult(result)
{
	trace(result);
}
function onFault(f:Event )
{
	trace("There was a problem: " + f.description);
}
stop();

PHP (Hello.php)

<?php
class Hello
{
	function sayHello($name)
	{
		return "Hello! $name";
	}
}
?>

Ethereal捕捉請求封包(AMF)

Ethereal捕捉回應封包(AMF)

(反白區就是請求與回應的位元組)

所以從上述所捕捉的封包來看~ Flash Remoting的確是採用binary format來傳輸,然而這只是一個簡單的小範例,所以尚無法將Remoting的優點發揮出來~

而筆者比較感興趣的地方就在於請求封包中的前二個位元組分別為「0x00、0x03」,其實這就是代表著此傳輸的AMF版本為AMF3,而緊接著一連串的位元組尚需要時間去做更深入的剖析,筆者有時間再為大家來分享~

2007-12-11 18:06:40 | Comments (1)

Hello AMF3 - 初次見面

還在用純文字(Plain Text)的方式傳送大量資料嗎?或許可以嘗試看看Flash Remoting~

(截圖來源:Using Flash Remoting for Flash MX 2004 ActionScript 2.0)

它採用了AMF(Action Message Format) binary format來當做溝通的橋樑,所以它可以支援以壓縮的方式來傳輸,而且在可供傳輸的資料型態還包含了ByteArray等多種型態(參考AMF3 Specification),另外AMF也隨著ActionScript 3.0的問世從AMF0直接跳到AMF3,然而最重要的是AMFPHP也一併支援AMF3了,這裡提供一個小範例供測試使用~

範例下載

基本上將你的AMF安裝好後,將範例中的Hello.php貼到你的「services/」目錄夾即可,最後開啟remoting.fla發佈後即可看到「Hello! AMF

參考資源:

Flash Remoting with AS3

Using Flash Remoting for Flash MX 2004 ActionScript 2.0

2007-12-11 17:19:06 | Add Comment

原來這就是「i++」和「++j」

這是一篇去年三月時寫的稿~ 當初是投稿到某雜誌社,不過由於題材並不是隨著潮流所趨,所以並沒有被接受刊登在雜誌上~ 剛好今天和朋友有聊到一些關於這方面的問題,希望這篇能帶給大家獲益良多的感受~

簡介

「i++」和「++i」在程式的撰寫上算是蠻常出現的一種寫法,然而或許我們知道他的觀念,但也許從未真正地了解並剖析它,此篇將從「組合語言」、「Java位元碼」和「Flash ActionModel」三種不同的角度來詮釋,希望透過此分享對於有興趣的朋友能有所助益~

下載:原來這就是「i++」和「++j」

2007-11-04 00:28:01 | Add Comment

How to create pop-up browser windows in Flash

How to create pop-up browser windows in Flash

這篇技術教學會教導你如何在瀏覽器內利用Flash來開啟視窗~

舉個例子來說,以往我們都會利用「getURL()」來達成這樣的功能,但在AS3.0就必須改用「navigateToURL()」,或是採用執行JavaScript的方式來達成,諸如此類的應用都可以在這篇教學中找到你的答案!

2007-08-01 14:34:06 | Add Comment

自訂你的右鍵選單-「ContextMenu」

在一個Flash動畫上點選右鍵時,它通常會出現如下圖所示的選單:

然而,倘若我們想要自訂一個屬於自己的選單列,那該如何達成呢?幸好在Flash Player 7之後,它為我們提供了一個「ContextMenu」,得以讓我們自訂屬於自己的右鍵選單,而這一切均需仰賴著「ContextMenu」來幫助我們達成這樣的效果。

隱藏內建的選單列

假設你只想要隱藏內建的選單列,只要透過呼叫「hideBuiltInItems()」即可隱藏內建的選單列,不過最後記得將「_leve0」這個「MovieClip」的屬性值「menu」指向我們所建立的「ContextMenu」即可:

程式一

var my_cm = new ContextMenu();
my_cm.hideBuiltInItems();
_root.menu = my_cm;

結果:

自訂一個屬於自己的選單列

程式二

var my_cm = new ContextMenu();
my_cm.hideBuiltInItems();
my_cm.customItems.push(new ContextMenuItem("sayHello",hello));
function hello(obj, menuItem)
{
	trace(obj);
	trace(menuItem.caption);
	hello_txt.text = "Hello!";
}
_root.menu = my_cm;

結果:

_level0
sayHello

不僅只有「MovieClip」可以有自訂的「ContextMenu」,包含「Button」和「TextField」都可以有自己的「ContextMenu」,例如你可以自訂一個「TextField」包含「copy」的選單項目,而經由執行這個選單項目會幫你複製「TextField」裡頭的字串等等,諸如此類的應用就自由發揮囉!

範例下載

2007-07-22 19:01:17 | Add Comment

Previous Posts
Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: Ads :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment