天才教育網(wǎng)合作機(jī)構(gòu) > 培訓(xùn)機(jī)構(gòu) >

東莞設(shè)計(jì)培訓(xùn)網(wǎng)

歡迎您!
朋友圈

全國(guó)統(tǒng)一學(xué)習(xí)專線 9:00-21:00

位置:培訓(xùn)資訊 > 體驗(yàn)Flash MX(2):LoadMovie和LoadVars

體驗(yàn)Flash MX(2):LoadMovie和LoadVars

日期:2005-12-24 00:00:00     瀏覽:282    來(lái)源:東莞設(shè)計(jì)培訓(xùn)網(wǎng)

  從上一篇文章中我們知道,新的Flash MX在程序員/設(shè)計(jì)師的界面上做得很好,甚至考慮了他們之前的切換問(wèn)題。你所要做的只是選擇Window-> Panel Sets->xxxx,由于接下來(lái)我們的需要,這個(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ǔ)句和代碼,剩下的一些有的被優(yōu)化有的繼續(xù)保留了,也就是說(shuō)這些代碼從此進(jìn)入了Macromedia的歷史(該公司也表示建議使用標(biāo)準(zhǔn)化的語(yǔ)句)。

  新的Action Script有兩類:一類是單獨(dú)功能的語(yǔ)句,例如運(yùn)算符,變量,屬性,方法,流程控制語(yǔ)句等;而另一類即是面向?qū)ο蠛托录尤氲牟考拍睢?BR>  面向?qū)ο蠛托录尤氲牟考拍钪饕址?小類:Core;Movie;Client/Server;Authoring。
  前三類重新對(duì)v5的對(duì)象進(jìn)行了分類,并加入了Stage、System、Microphone,Camera,NetStream,NetConnection,Video等新的對(duì)象,Button,TextField,TextFormat等常用的物體現(xiàn)在也可以通過(guò)ActionScript來(lái)作為基本對(duì)象控制;而且v5常用的LoadVars()已經(jīng)被單獨(dú)分離出來(lái)作為對(duì)象并且具有很多常用的方法和錯(cuò)誤狀態(tài),這是值得興奮的呢……還有就是配合Authoring 工具使用的Authoring類別,由于Flash MX整合了Generator(又一個(gè)不幸進(jìn)入歷史),加之以后Flash MX的服務(wù)器端將由ColdFusion MX擔(dān)任,可見(jiàn)今后的Flash網(wǎng)絡(luò)可以配合自身具有一些Generator的一些功能來(lái)實(shí)現(xiàn)強(qiáng)大的網(wǎng)絡(luò)體系結(jié)構(gòu)。

  本文的重點(diǎn)部分是作為交互作用的LoadMovie()ActionLoadVars對(duì)象,我們也通過(guò)實(shí)例的形式來(lái)看看其魅力如何。

  LoadMovie();LoadMovieNum();

  你還在Flash5中為了動(dòng)態(tài)導(dǎo)入JPG圖片而痛苦地把上百個(gè)圖片轉(zhuǎn)換成Swf格式呢嗎?現(xiàn)在請(qǐng)停止那機(jī)械勞動(dòng)吧。升級(jí)為Flash MX之后,我們可以嘗試下面的例子:

  首先,用Rectangle工具在場(chǎng)景中適當(dāng)?shù)奈恢卯嬕粋€(gè)正方形,接著按F8把它轉(zhuǎn)換為標(biāo)號(hào),按鈕。(圖1)

(圖1)

  接著,選中這個(gè)按鈕,并按“F2”打開(kāi)Action面板,輸入下面的AS:

  on (release) {
   loadMovieNum("boy.jpg", 1);
  }

  注意,源文件和jpg文件需要放入同一目錄中,接著圖片會(huì)在按鈕釋放的時(shí)候被讀入場(chǎng)景的第1 level中。(圖2)

(圖2)

  測(cè)試結(jié)果表明Flash MX的LoadMovie宣稱支持JPG為事實(shí)。

  LoadMovie()和LoadMovieNum()有什么不同?如果你在Flash 5中沒(méi)有解決這個(gè)問(wèn)題,下面的修改會(huì)給你滿意的解釋。

  修改剛才的按鈕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語(yǔ)句可以幫你,當(dāng)場(chǎng)景中不存在mc這個(gè)MovieClip的Instance時(shí),引入Flash MX的新MovieClip的方法createEmptyMovieClip()來(lái)動(dòng)態(tài)產(chǎn)生一個(gè)MovieClip,叫做“mc”并置入Depth1。然后用loadMovie方法讀入jpg文件,你可以發(fā)現(xiàn)MovieClip的loadMovie方法是沒(méi)有Num字樣的,上面問(wèn)題的答案自然就可以解釋為不讀入MovieClip中的Swf/Jpg是loadMovie,反之既是loadMovieNum,上面*一條語(yǔ)句也可以寫為loadMovie(“boy.jpg”,”mc”);。

  下面做一個(gè)惡作劇,來(lái)讓按按鈕的人不知道如何按自己的按鈕。這個(gè)時(shí)候你可以加入上面已經(jīng)加入的設(shè)置_x/_y屬性的Action。結(jié)果我們發(fā)現(xiàn)一個(gè)奇怪的事情,當(dāng)圖片出現(xiàn)在按鈕之上的時(shí)候,該按鈕的事件還是會(huì)被響應(yīng),而沒(méi)有達(dá)到我們惡作劇的效果,不知道這個(gè)屬于Bug還是MM早看透了我的惡作劇,不過(guò)下次我們可以嘗試動(dòng)態(tài)產(chǎn)生兩個(gè)按鈕,看看相應(yīng)優(yōu)先級(jí)(后面我們會(huì)講到Button對(duì)象)。(圖3)

(圖3)

  LoadVars對(duì)象

  新的LoadVars對(duì)象看起來(lái)更像是一個(gè)針對(duì)變量處理的XML對(duì)象的簡(jiǎn)化版。它通過(guò)傳輸符合application/x-標(biāo)準(zhǔn)的MIME格式的字符串來(lái)和ASP/PHP/JSP服務(wù)器交互信息。

  LoadVars對(duì)象的主要方法有send()、load()、sendAndLoad(),我簡(jiǎn)單作了一個(gè)服務(wù)器/客戶的交互結(jié)構(gòu)來(lái)說(shuō)明他們的用法。

  首先,隨便做三個(gè)控制按鈕,上面寫著區(qū)分他們的文本即可。

  接著,我們按F2打開(kāi)場(chǎng)景的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對(duì)象,*個(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)的,而且是沒(méi)有任何返回值的,我們可以通過(guò)debugTrace來(lái)查看結(jié)果。

  第二個(gè)按鈕的Action:(Load)

  on (release) {
   varsobj.load(aimUrl+"putvar.php");
   debugTrace(varsobj);
  }

  loadVars對(duì)象讀入數(shù)據(jù)的方式是異步傳送,既是如果當(dāng)前接收到的變量相同則覆蓋,不同則接收,互不影響,結(jié)果通過(guò)debugTrace判斷。

  第三個(gè)按鈕的Action:(sendAndLoad)

  on (release) {
   tempvars.saved=0;
   varsobj.sendAndLoad(aimUrl+"savevar2.php?saved=1",tempvars);
  }

  和我們熟知的XML對(duì)象一樣,sendAndLoad對(duì)象需要有一個(gè)接收的loadVars對(duì)象來(lái)接收服務(wù)器的返回?cái)?shù)據(jù)。這時(shí),onLoad的作用會(huì)體現(xiàn)出來(lái)。

  服務(wù)器端

  我用PHP簡(jiǎn)單的寫了三個(gè)對(duì)應(yīng)請(qǐ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,所需要的一切就緒,那么我們可以看看測(cè)試結(jié)果:(圖4)

(圖4)

  結(jié)果沒(méi)有什么可以新意,還是那句話,既是XML對(duì)象的簡(jiǎn)化版。不過(guò),這樣的結(jié)構(gòu)在需要速度的前提并處理不到嚴(yán)謹(jǐn)?shù)奈谋窘Y(jié)構(gòu)時(shí)可以有效利用。

  可以trace(varsobj.load(false));的返回值居然是true(冷汗……),現(xiàn)在我想我更加確定load的可靠性了…… 對(duì)小型的Flash網(wǎng)站來(lái)說(shuō),新改進(jìn)的loadMovie可以善加利用,可以有效的減少用戶下載時(shí)間和你的制作時(shí)間;而對(duì)于速度要求非常高但沒(méi)有條件作專業(yè)數(shù)據(jù)庫(kù)的人呢,loadVars對(duì)象應(yīng)該會(huì)讓你滿意,或者做個(gè)聊天室留言板什么的都不是什么難事。

  不知道未知的bug有多少,我還未檢測(cè)sendAndLoad是否還有非安全讀入的bug。不過(guò)樂(lè)觀的是Flash MX在擴(kuò)展性和官方服務(wù)上作的很好,相信中后期的Flash MX將是一個(gè)完善的開(kāi)發(fā)工具。(目前Macromedia正在做對(duì)J2EE和.NET的支持)

  輕快的音樂(lè)一首接著一首,而寫到這里,將是我喜歡的DMX的Party Up:“Y’all gon’ want to check document, Click here, Click here->

如果本頁(yè)不是您要找的課程,您也可以百度查找一下: