欧美日韩精品在线,国内精品久久久久久久久,一级毛片恃级毛片直播,清纯唯美亚洲综合欧美色

Flash AS3中數(shù)據(jù)發(fā)送與接收_Flash教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:Flash8模糊濾鏡繪制逼真青翠竹林
本文中我們用Flash繪制一幅非常逼真的青翠竹林圖,重點(diǎn)是利用模糊濾鏡制作景深效果。1、Flash中新建兩個(gè)文件。導(dǎo)入?yún)⒖紙D片及繪建立繪畫舞臺(tái),使用線條工具繪

先回顧一下as2中相關(guān)的解決辦法

相信大部分人用的都是LoadVars類吧

1 var xianshi_lv = new LoadVars();
2 xianshi_lv.bianliang1 = "變量一";
3 xianshi_lv.bianliang2 = "變量二";
4 xianshi_lv.bianliang3 = "變量三";
5 xianshi_lv.sendAndLoad("http://10.7.87.222/show.asp? bianliang=" random(9999), xianshi_lv, "post");
6 xianshi_lv.onLoad = function(chenggong:Boolean) {
7 if (chenggong) {
8 trace(xianshi_lv)
9 };
}

  • 第1行:定義LoadVars對(duì)象,這家伙在as2時(shí)代幾乎把所有連接外部數(shù)據(jù)的事情都做完了。無敵!
  • 第2 3 4 行:在LoadVars對(duì)象中存儲(chǔ)變量,直接發(fā)送到外部腳本中。
  • 第5行:執(zhí)行sendAndLoad方法,意思是send后,load回調(diào)的數(shù)據(jù)。
  • 第6行:onLoad事件,判定load回調(diào)數(shù)據(jù),
  • 第7行:判定load回調(diào)是否成功。

在as2時(shí)代,LoadVars類把存儲(chǔ)變量,連接外部數(shù)據(jù),接受回調(diào)數(shù)據(jù)這些事情都做完了。筆者也弄很久的as2,覺得這方法不錯(cuò),學(xué)習(xí)起來也很簡(jiǎn)單。
但是as3不同,為了分工清楚,把上面的存儲(chǔ)變量,連接外部數(shù)據(jù),接受回調(diào)數(shù)據(jù)這幾個(gè)事情都分散開了。一定程度上,本人覺得有點(diǎn)麻煩。不知道adobe是怎么想的。也許是本人還沒發(fā)現(xiàn)adobe的真正意圖·
既然as3來了,還是按他的規(guī)矩辦吧
他是什么規(guī)矩呢?

第一部分:預(yù)備發(fā)送數(shù)據(jù)

1:考慮連接的外部url地址了

as2中把url地址,變量,通通寫到LoadVars類里面。變量少?zèng)]什么,要是變量多起來,那就有點(diǎn)麻煩,遇上要?jiǎng)討B(tài)修改變量那更加麻煩了。as3索性把把這一部分又分為兩塊,統(tǒng)一到URLRequest對(duì)象里面。單純的url地址用URLRequest.url表示,變量用URLRequest.data表示。修改起來方便許多。

注重url地址也可以在使用URLRequest構(gòu)造函數(shù)的時(shí)候?qū)戇M(jìn)去。

2:數(shù)據(jù)傳送方法,post還是get

as3狠了心了,要把它分的徹徹底底。把傳送方法也弄到URLRequest對(duì)象里面去。用URLRequest對(duì)象的method屬性表示。

同時(shí)也有兩種定義改屬性的方法:

request.method = URLRequestMethod.POST;//幫助文件中多用這種定義方式
request.method = "post";

以上兩句是等效的。你可以試試trace(URLRequestMethod.POST)。輸入是 post。
由于as3的默認(rèn)method是get,建議都顯示定義為post。

第二部分:發(fā)送數(shù)據(jù)

1:整合send和load,就用一個(gè)load。

as2中,有單獨(dú)的load和send,還有sendAnaLoad。個(gè)人覺得前兩個(gè)函數(shù)沒用,既然是和外部數(shù)據(jù)通訊,每一個(gè)與外部的連接中,都需要檢查flash的狀態(tài)和外部數(shù)據(jù)的狀態(tài),才能保證雙方的通信正常。那么load和send就丟掉,用一個(gè)就行了。ADOBE把剩下的sendAndLoad()統(tǒng)一改成load,不僅邏輯結(jié)構(gòu)上更加合理,就連書寫都簡(jiǎn)單了一半。

相關(guān)語法:

URLLoader () 構(gòu)造函數(shù)
public 函數(shù) URLLoader(request:URLRequest = null)

注重括號(hào)中是個(gè)URLRequest對(duì)象。已經(jīng)把url地址,變量,方法都包括進(jìn)去了。URLLoader對(duì)象現(xiàn)在執(zhí)行的就是連接數(shù)據(jù),接受數(shù)據(jù)兩個(gè)事情,其他的都交給URLRequest對(duì)象治理。因?yàn)閁RLLoader對(duì)象還有很多事情要做,比如偵聽連接數(shù)據(jù)和接受數(shù)據(jù)的情況,是否已經(jīng)完成操作,或者已經(jīng)完成到什么程度。在這里就大有文章了,各種各樣的loading都需要URLLoader對(duì)象的bytesLoaded屬性和bytesTotal 屬性實(shí)現(xiàn)。所以說,as3的分工還是很有道理的。

下面給出預(yù)備數(shù)據(jù),連接外部數(shù)據(jù)的典型代碼.接受數(shù)據(jù)處理數(shù)據(jù)將在下一步討論

var request:URLRequest = new URLRequest("http://10.7.87.222/test.asp");
//request.contentType = "text/xml";//這句代碼可以自己?jiǎn)为?dú)嘗試一下。筆者初學(xué),也沒具體去研究這個(gè)。只知道傳遞接收xml數(shù)據(jù)的時(shí)候有用。呵呵
request.data = "bianliang=100";
request.method = "POST";
var loader:URLLoader = new URLLoader();
loader.load(request);

附asp代碼,需要在iis5以上服務(wù)器上測(cè)試.保存文件為 UTF-8編碼,文件名為test.asp.位于站點(diǎn)根目錄下.

<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>
<%
var bianliang=Request("bianliang")
Response.Write("&biangliang=" bianliang)
Response.Write("&chenggong=chenggong")
%>

第三部分:接受數(shù)據(jù)

我想提示的有兩點(diǎn)是:

1 數(shù)據(jù)需要加載完成以后,才能被flash使用.
所以一定要判定是否加載完成
但是所用的語句與as2已經(jīng)完全不同了.
as2使用onLoad事件
as3代碼如下

loader.addEventListener(Event.COMPLETE,completeHandler);
function completeHandler(event:Event):void {
trace(loader.data);
}

目前大家只要熟悉到數(shù)據(jù)的加載情況必須用事件偵聽就行了.

其實(shí)as3中的交互事件,都已經(jīng)采用上面代碼所有的事件偵聽模式.

2 需要區(qū)分 URLRequest類的data屬性與URLLoader類的data屬性
前者是表示傳遞變量的一個(gè)集合,后者是接受到的數(shù)據(jù)的一個(gè)集合.
別搞混就行了.

假如這一部分要深入下去,涉及的東西就比較多了.
包括xml的處理,和字符串的處理.
各位可以先把上面說的東西先弄熟悉了.
然后再學(xué)習(xí)怎么處理數(shù)據(jù),以便flash使用.
再此就不再過多敘述了,因?yàn)橐呀?jīng)跑題了.

差不多講完了?
NO ,我想還有個(gè)東西需要單獨(dú)提出來說說

第四部分:如何組織發(fā)送的變量?

as2中的loadvars類,它是用n個(gè)屬性保存變量
as3使用URLRequest類的data屬性保存變量.
使用一個(gè)屬性保存變量?
更絕的是,該data屬性是一個(gè)object值.靠!
理論上說,我們已經(jīng)可以把a(bǔ)s3中的任意東西傳送給外部腳本.
現(xiàn)實(shí)一點(diǎn)來說,
將data屬性定義為一個(gè)string類型,
就已經(jīng)能實(shí)現(xiàn)我們的簡(jiǎn)單需求了
比如傳遞多個(gè)變量
URLRequest.data="變量1=1&變量2=2&變量3=3",
只要會(huì)一定的字符串操作,就能很好的組織自己想發(fā)送的數(shù)據(jù)了.
站巨人肩上,我們?cè)傧胍幌?BR>假如有n個(gè)變量,(n的值可以讓人操作n個(gè)字符串的時(shí)候發(fā)狂.呵呵)
假如是loadvars類,那沒辦法,還是老老實(shí)實(shí)的一個(gè)一個(gè)寫吧
as3中,怎么弄?怎么弄?怎么弄?怎么弄?怎么弄?怎么弄?
既然data屬性是個(gè)object值.
又需要保存很多數(shù)據(jù).
那么有個(gè)詞已經(jīng)呼之欲出了
數(shù)組!
說到這里我就卡住了,
我再考慮,數(shù)組這部分究竟就該具體的說一下 ,還是略去.
考慮2分鐘.................

既然能學(xué)到今天的as3想必已經(jīng)是as2老手了,數(shù)組操作不講也罷了
假如是新手剛?cè)腴T,估計(jì)您應(yīng)該先去as2版塊找找數(shù)組的資料
呵呵 小弟這里就偷偷懶 見諒了

最后提示一個(gè)
假如你還是喜歡as2的書寫方式。
as3還是可以滿足你的。
參考URLVariables類。
代碼如下:

var variables:URLVariables = new URLVariables();
variables.exampleSessionId = new Date().getTime();
variables.exampleUserLabel = "guest";
request.data = variables;

前面3句代碼似曾相識(shí)吧
完全和as2的loadvars類一樣,
只不過最后還是需要把URLVariables對(duì)象賦值給URLRequest對(duì)象的data屬性。

URLRequest.data中大有文章,它是一個(gè)Object值。理論上來說就可以傳遞任何東西,無論是可視對(duì)象還是不可視的其他對(duì)象(各種類),但是對(duì)于與外部腳本通信來說,我們需要的僅僅是name=value 如此格式的字符串,然后用 &符號(hào)連接而已。
在As3中組織需要傳遞的變量,推薦的做法是用URLVariables類。
說白了,就是剝奪了政治權(quán)利的 LoadVars類,然后給改名成了URLVariables類。
具體的方法和屬性,參考一下幫助文件就行了
下面給出一個(gè)范例代碼,也是在上文中出現(xiàn)過的:

var request:URLLoader=new URLLoader
var variables:URLVariables = new URLVariables();
variables.變量一 = "變量一"
variables.變量一 = "變量二";
request.data = variables;
trace(variables)
trace(request.data)

從trace的結(jié)果應(yīng)該知道,variables已經(jīng)將自己的幾個(gè)屬性以及屬性值用&連接起來了。
當(dāng)初我還以為可以在URLRequest.data上大做文章,隨著進(jìn)一步的學(xué)習(xí)和實(shí)驗(yàn),發(fā)現(xiàn),其實(shí)用數(shù)組來組織需要傳遞的變量其實(shí)沒什么必要了,也不能直接實(shí)現(xiàn)。
為什么說不能直接實(shí)現(xiàn)呢?看一個(gè)例子就知道了
下面我們令URLRequest.data等于一個(gè)數(shù)組,看代碼:

var my_arr:Array=new Array();
my_arr[0]= "123"
my_arr[1]= "456"
var request:URLLoader=new URLLoader
request.data=my_arr
trace(my_arr)
trace(request.data)
Trace結(jié)果都是 123,456

這樣的結(jié)果用于傳遞變量到外部腳本肯定是不能用的。
外部腳本能夠接受的變量形式首先要求是name=value配對(duì),然后是用&連接。
相對(duì)于能自動(dòng)組織變量的URLVariables類來說,用數(shù)組的方法真是有點(diǎn)麻煩。

但是我們還是要看到數(shù)組操作的好處,能遍歷,能循環(huán)操作。
所以,小弟認(rèn)為只要您需要的數(shù)據(jù)能用一個(gè)通項(xiàng)(或者多個(gè)參數(shù))來表示或者具有一定的規(guī)律,可以用數(shù)學(xué)關(guān)系描述,用數(shù)組也能為你提高工作效率。
但是我們還需要對(duì)數(shù)組進(jìn)行一定的加工,才能用。

加工步驟一:

var my_arr:Array=new Array();
my_arr[0]= "變量一=123";
my_arr[1]= "變量二=456";
數(shù)組各項(xiàng)采用name=value形式,

加工步驟二:

var a:Number=my_arr.length;
var i:Number
my_arr[a]="";
for (i=0; i my_arr[a]= my_arr[a] my_arr[i] "&";
}
trace(my_arr[a]);

遍歷所有數(shù)組項(xiàng),用&符號(hào)連接各項(xiàng),并添加到該數(shù)組的最后一項(xiàng)。
Trace得到變量一=123&變量二=456&,這樣就已經(jīng)得到符合要求的字符串了。

加工步驟三:

var my_urlloader:URLLoader=new URLLoader()
my_urlloader.data=my_arr[a]
trace(my_urlloader.data)

將上面數(shù)組的最后一項(xiàng)賦值,即變量一=123&變量二=456&,給my_urlloader.data

初看起來,確實(shí)很麻煩。
偶無聊,于是給Array類prototype了一個(gè)新方法toloadvars,把上面說到的幾個(gè)步驟,進(jìn)行了一定的集成,如下:

Array.prototype.toloadvars=function(URLrequest:URLRequest){
var i:Number
var a:Number=this.length
this[a]=""
for(i=0;i this[a]=this[a] this[i] "&"
}
URLrequest.data=this[a]
return URLrequest.data
};

看看怎么用吧?新手又必要看,老鳥別笑我
舉個(gè)例子:

Array.prototype.toloadvars=function(URLrequest:URLRequest){
var i:Number
var a:Number=this.length
this[a]=""
for(i=0;i this[a]=this[a] this[i] "&"
}
URLrequest.data=this[a]
return URLrequest.data
};
var arr:Array=new Array();
arr[0]="a=123"
arr[1]="b=456"
arr[2]="c=789"
arr[3]="d=abc"
var my_url:URLRequest=new URLRequest()
arr.toloadvars(my_url);
trace(my_url.data)

  • 第一步:把新定義的toloadvars方法復(fù)制到動(dòng)作面板頂部,
  • 第二步:定義數(shù)組,用來組織變量,注重格式。這里就看個(gè)人發(fā)揮了。用的好,能大大提高效率。
  • 第三步:定義URLRequest對(duì)象
  • 第四步:調(diào)用數(shù)組的toloadvars方法,傳遞參數(shù)是my_url對(duì)象。

然后就開始執(zhí)行自定義的toloadvars方法了,
該方法將自動(dòng)將數(shù)組中定義的每一個(gè)變量,用&連接起來,然后將連接后的結(jié)果送到URLrequest.data屬性里面。

最后提示:最好將URLRequest對(duì)象的url,method都定義好,然后用數(shù)組組織變量,然后用toloadvars方法。這個(gè)思路會(huì)稍微清楚點(diǎn),不會(huì)混亂。

分享:Flash AS制作盛開的花朵視覺特效
知識(shí)點(diǎn):a、漸變色,形變動(dòng)畫的應(yīng)用。b、元件的as標(biāo)識(shí)符。c、attachMovie的應(yīng)用。d、movieClip的各項(xiàng)屬性的使用。e、濾鏡的應(yīng)用。在1-30幀之間,做一個(gè)花

來源:藍(lán)色理想//所屬分類:Flash教程/更新時(shí)間:2008-03-05
相關(guān)Flash教程