從上一篇文章中我們知道,新的Flash MX在程序員/設(shè)計(jì)師的界面上做得很好,甚至考慮了他們之前的切換問題。你所要做的只是選擇Window-> Panel Sets->xxxx,由于接下來我們的需要,這個(gè)xxxx你需要選擇Developer。
新改進(jìn)的Flash ActionScript是根據(jù)歐洲的ECMA-262編碼標(biāo)準(zhǔn)寫的,在Flash MX中,已經(jīng)剔除了Flash 5和以前版本的所有不符合這個(gè)標(biāo)準(zhǔn)的語句和代碼,剩下的一些有的被優(yōu)化有的繼續(xù)保留了,也就是說這些代碼從此進(jìn)入了Macromedia的歷史(該公司也表示建議使用標(biāo)準(zhǔn)化的語句)。
新的Action Script有兩類:一類是單獨(dú)功能的語句,例如運(yùn)算符,變量,屬性,方法,流程控制語句等;而另一類即是面向?qū)ο蠛托录尤氲牟考拍睢?BR> 面向?qū)ο蠛托录尤氲牟考拍钪饕址?小類:Core;Movie;Client/Server;Authoring。
前三類重新對v5的對象進(jìn)行了分類,并加入了Stage、System、Microphone,Camera,NetStream,NetConnection,Video等新的對象,Button,TextField,TextFormat等常用的物體現(xiàn)在也可以通過ActionScript來作為基本對象控制;而且v5常用的LoadVars()已經(jīng)被單獨(dú)分離出來作為對象并且具有很多常用的方法和錯(cuò)誤狀態(tài),這是值得興奮的呢……還有就是配合Authoring 工具使用的Authoring類別,由于Flash MX整合了Generator(又一個(gè)不幸進(jìn)入歷史),加之以后Flash MX的服務(wù)器端將由ColdFusion MX擔(dān)任,可見今后的Flash網(wǎng)絡(luò)可以配合自身具有一些Generator的一些功能來實(shí)現(xiàn)強(qiáng)大的網(wǎng)絡(luò)體系結(jié)構(gòu)。
本文的重點(diǎn)部分是作為交互作用的LoadMovie()Action和LoadVars對象,我們也通過實(shí)例的形式來看看其魅力如何。
LoadMovie();LoadMovieNum();
你還在Flash5中為了動態(tài)導(dǎo)入JPG圖片而痛苦地把上百個(gè)圖片轉(zhuǎn)換成Swf格式呢嗎?現(xiàn)在請停止那機(jī)械勞動吧。升級為Flash MX之后,我們可以嘗試下面的例子:
首先,用Rectangle工具在場景中適當(dāng)?shù)奈恢卯嬕粋€(gè)正方形,接著按F8把它轉(zhuǎn)換為標(biāo)號,按鈕。(圖1)
(圖1)
接著,選中這個(gè)按鈕,并按“F2”打開Action面板,輸入下面的AS:
on (release) {
loadMovieNum("boy.jpg", 1);
}
注意,源文件和jpg文件需要放入同一目錄中,接著圖片會在按鈕釋放的時(shí)候被讀入場景的第1 level中。(圖2)
(圖2)
測試結(jié)果表明Flash MX的LoadMovie宣稱支持JPG為事實(shí)。
LoadMovie()和LoadMovieNum()有什么不同?如果你在Flash 5中沒有解決這個(gè)問題,下面的修改會給你滿意的解釋。
修改剛才的按鈕Action:
on (release) {
if (mc == undefined) {
_root.createEmptyMovieClip("mc",1);
}
mc._x=random(300);
mc._y=random(300);
mc.loadMovie("boy.jpg",1);
}
由于懶惰,你甚至連多做一個(gè)空MovieClip都不愿意的時(shí)候,那么上面的if語句可以幫你,當(dāng)場景中不存在mc這個(gè)MovieClip的Instance時(shí),引入Flash MX的新MovieClip的方法createEmptyMovieClip()來動態(tài)產(chǎn)生一個(gè)MovieClip,叫做“mc”并置入Depth1。然后用loadMovie方法讀入jpg文件,你可以發(fā)現(xiàn)MovieClip的loadMovie方法是沒有Num字樣的,上面問題的答案自然就可以解釋為不讀入MovieClip中的Swf/Jpg是loadMovie,反之既是loadMovieNum,上面*一條語句也可以寫為loadMovie(“boy.jpg”,”mc”);。
下面做一個(gè)惡作劇,來讓按按鈕的人不知道如何按自己的按鈕。這個(gè)時(shí)候你可以加入上面已經(jīng)加入的設(shè)置_x/_y屬性的Action。結(jié)果我們發(fā)現(xiàn)一個(gè)奇怪的事情,當(dāng)圖片出現(xiàn)在按鈕之上的時(shí)候,該按鈕的事件還是會被響應(yīng),而沒有達(dá)到我們惡作劇的效果,不知道這個(gè)屬于Bug還是MM早看透了我的惡作劇,不過下次我們可以嘗試動態(tài)產(chǎn)生兩個(gè)按鈕,看看相應(yīng)優(yōu)先級(后面我們會講到Button對象)。(圖3)
(圖3)
LoadVars對象新的LoadVars對象看起來更像是一個(gè)針對變量處理的XML對象的簡化版。它通過傳輸符合application/x-標(biāo)準(zhǔn)的MIME格式的字符串來和ASP/PHP/JSP服務(wù)器交互信息。
LoadVars對象的主要方法有send()、load()、sendAndLoad(),我簡單作了一個(gè)服務(wù)器/客戶的交互結(jié)構(gòu)來說明他們的用法。
首先,隨便做三個(gè)控制按鈕,上面寫著區(qū)分他們的文本即可。
接著,我們按F2打開場景的Action面板,輸入這段Action:
varsobj=new loadvars();
tempvars=new loadvars();
tempvars.onLoad=function(loaded){if (loaded){trace("loaded");this.saved=1;debugTrace(this)}};
aimUrl=
debugTrace = function (what) { for (var elm in what) {trace(elm+"="+what[elm])}};
首先創(chuàng)建兩個(gè)loadVars對象,*個(gè)是發(fā)送用,第二個(gè)是接收用。既然第二個(gè)是接收數(shù)據(jù)用的,當(dāng)然就要有onLoad事件,這個(gè)onLoad事件默認(rèn)狀態(tài)不存在,所以創(chuàng)建它并得給它一個(gè)處理函數(shù)。定義服務(wù)器地址aimUrl,*加入自定義的排錯(cuò)函數(shù)察幫助看結(jié)果。
*個(gè)按鈕的Action:(Send)
on (release) {
varsobj.send(aimUrl+"savevar.php");
debugTrace(varsobj);
}
發(fā)送數(shù)據(jù)是不改變當(dāng)前狀態(tài)的,而且是沒有任何返回值的,我們可以通過debugTrace來查看結(jié)果。
第二個(gè)按鈕的Action:(Load)
on (release) {
varsobj.load(aimUrl+"putvar.php");
debugTrace(varsobj);
}
loadVars對象讀入數(shù)據(jù)的方式是異步傳送,既是如果當(dāng)前接收到的變量相同則覆蓋,不同則接收,互不影響,結(jié)果通過debugTrace判斷。
第三個(gè)按鈕的Action:(sendAndLoad)
on (release) {
tempvars.saved=0;
varsobj.sendAndLoad(aimUrl+"savevar2.php?saved=1",tempvars);
}
和我們熟知的XML對象一樣,sendAndLoad對象需要有一個(gè)接收的loadVars對象來接收服務(wù)器的返回?cái)?shù)據(jù)。這時(shí),onLoad的作用會體現(xiàn)出來。
服務(wù)器端
我用PHP簡單的寫了三個(gè)對應(yīng)請求的.php文本,你可以copy下面的文本。
putvar.php:
?。?
echo "a=1&b=2&c=3";
?>
savevar.php:
?。?
//save function
?>
savevar2.php:
<?
if ($saved==1) echo "saved=2";
?>
Ok,所需要的一切就緒,那么我們可以看看測試結(jié)果:(圖4)
(圖4)
結(jié)果沒有什么可以新意,還是那句話,既是XML對象的簡化版。不過,這樣的結(jié)構(gòu)在需要速度的前提并處理不到嚴(yán)謹(jǐn)?shù)奈谋窘Y(jié)構(gòu)時(shí)可以有效利用。
可以trace(varsobj.load(false));的返回值居然是true(冷汗……),現(xiàn)在我想我更加確定load的可靠性了…… 對小型的Flash網(wǎng)站來說,新改進(jìn)的loadMovie可以善加利用,可以有效的減少用戶下載時(shí)間和你的制作時(shí)間;而對于速度要求非常高但沒有條件作專業(yè)數(shù)據(jù)庫的人呢,loadVars對象應(yīng)該會讓你滿意,或者做個(gè)聊天室留言板什么的都不是什么難事。
不知道未知的bug有多少,我還未檢測sendAndLoad是否還有非安全讀入的bug。不過樂觀的是Flash MX在擴(kuò)展性和官方服務(wù)上作的很好,相信中后期的Flash MX將是一個(gè)完善的開發(fā)工具。(目前Macromedia正在做對J2EE和.NET的支持)
輕快的音樂一首接著一首,而寫到這里,將是我喜歡的DMX的Party Up:“Y’all gon’ want to check document, Click here, Click here->