日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

Flash片頭loading與MovieClipLoader_Flash教程

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

推薦:Flash片頭加載loading的基礎(chǔ)討論
很早之前我曾經(jīng)說過“沒有l(wèi)oading的flash,不是完整的flash”。我想那個(gè)句話可能偏激了。因?yàn)橛袝r(shí)候一些不到10k的flash,確實(shí)不需要做什么loading。但我始終認(rèn)為

很早之前我曾經(jīng)說過“沒有loading的Flash,不是完整的flash”。我想那個(gè)句話可能偏激了。因?yàn)橛袝r(shí)候一些不到10k的flash,確實(shí)不需要做什么loading。但我始終認(rèn)為,做一個(gè)優(yōu)秀的loading是衡量一個(gè)flasher水準(zhǔn)、甚至態(tài)度的,因?yàn)閘oading是唯一一個(gè)你不會(huì)多看而所有用戶、客戶會(huì)看的東西,所以你對loading的重視程度,甚至可以反襯你這個(gè)flasher的職業(yè)道德。
  轉(zhuǎn)載請保留原文地址:http://www.awflasher.com/blog/?id=444

  Flash的loading的技術(shù)討論共分為三部分:

  1、基礎(chǔ)
  2、MovieClipLoader相關(guān)討論(較深入)
  3、V2組件相關(guān)問題

  前面我們介紹了基礎(chǔ)部分,今天我們對MovieClipLoader做Flash loading做一些深入的相關(guān)討論。

  讀取外埠數(shù)據(jù)參與Flash應(yīng)用程序部署是一件非常重要和常見的工作,尤其是我們經(jīng)常需要檢測這些數(shù)據(jù)加載的進(jìn)度。MovieClipLoader(下稱MCL)類就可以幫我們大大簡化這項(xiàng)麻煩工作。此外,它使得我們能獲取更多的需要,并減少代碼量。我們可以用一個(gè)單獨(dú)的MovieClip類來載入一個(gè),或者多個(gè)外埠資源到指定的MC或者層級(jí),或者我們可以為每一個(gè)加載工作制定不同的MCL實(shí)例。

  我決定分兩部分來完成這篇教程。首先,我們將介紹MCL的基本用法;然后我們將介紹如何使用一個(gè)單獨(dú)的MCL實(shí)例來讀取外埠資源到不同的MC,并且,我們將加入偵聽器對象來參與工作。當(dāng)然,不通過偵聽器也可以完成任務(wù),我們暫時(shí)不介紹偵聽器,因?yàn)檫@樣你會(huì)更加輕易理解MCL。

  那么,我們首先來大體了解一下MCL有哪些回調(diào)函數(shù),后面也會(huì)有具體介紹(aw附:回調(diào)函數(shù)我個(gè)人理解就是某一個(gè)類組、參數(shù)事先確定,擁有指定功效的方法)這里可以了解一下什么叫做回調(diào)函數(shù)):

  MovieClipLoader對象的回調(diào)函數(shù):

  事件回調(diào)函數(shù)(嚴(yán)格要求數(shù)據(jù)類型的時(shí)候,它們并不是方法,后祥):
* MovieClipLoader.onLoadStart() - 當(dāng)加載開始的時(shí)候觸發(fā)
* MovieClipLoader.onLoadProgress() - 在讀取進(jìn)行中觸發(fā)
* MovieClipLoader.onLoadInit() - 讀取資源載入后的第一幀執(zhí)行完成后觸發(fā)
* MovieClipLoader.onLoadComplete() - 當(dāng)讀取的外埠資源已經(jīng)完全下載到本地時(shí)觸發(fā)。
* MovieClipLoader.onLoadError() - 當(dāng)加載外埠資源出錯(cuò)時(shí)觸發(fā)。
* MovieClipLoader.unloadClip() - 將加載的外埠資源移除或終止一個(gè)加載工作。

  方法回調(diào)函數(shù):

  * MovieClipLoader.getProgress(target:Object):Object - 讀取外埠資源的進(jìn)展,參數(shù)為MC對象(aw附:其實(shí)MC這種數(shù)據(jù)類型也就是一種對象)。返回一個(gè)對象,該對象包含兩種事先預(yù)定好的屬性(后祥)

  要想好好理解這些回調(diào)函數(shù),我們動(dòng)手試驗(yàn)一下是最好的方法。當(dāng)然MCL是Flash7之后才有的,所以別忘了發(fā)布的時(shí)候發(fā)布成為7 的版本號(hào)。假如直接用FlashPlayer來調(diào)試可能會(huì)碰到一些問題,我們推薦在瀏覽器中進(jìn)行調(diào)試(個(gè)人意見:對于外埠資源難以獲得情況,比如教育網(wǎng)獲取公網(wǎng)資源,最好不要在IDE中調(diào)試)

  在我們的例子中,我們將用一個(gè)MCL對象來讀取不同的圖片,并將它們置入不同的空MC中。本例中要用到的swf文件和圖像源文件將在Actionscript.org找到(個(gè)人建議:其實(shí)看完這篇文章要不要源文件沒有必要了)

  1、建立一個(gè)新的Flash文檔,并在第1幀輸入以下腳本:
  

_root.traceBox.vScrollPolicy ="on";
function myTrace(msg)
{
_root.traceBox.text = msg newline;
_root.traceBox.vPosition = _root.traceBox.maxVPosition;
}

  我們這里是在建立一種跟蹤調(diào)試機(jī)制,調(diào)試的(變量)將輸出到文本框組件中。這里的方法"myTrace"是預(yù)先定義好的一個(gè)函數(shù),它幫助我們順利完成對某些信息的監(jiān)控;其中第二句的作用是使文本框隨時(shí)輸出最新監(jiān)控值。

  2、現(xiàn)在從組建庫托拽一個(gè)TextArea組件進(jìn)入場景,并給以合適的大小,以及一個(gè)實(shí)例名稱traceBox(對應(yīng)上面的腳本)

  3、接下來,我們要建立一個(gè)新的MC元件。并在場景上部署3個(gè)實(shí)例,為它們分別命名為myMC1,myMC2,myMC3。我們將把圖片或者swf影片裝載進(jìn)入它們,并且,在它們下載到本地后按照需求調(diào)整它們的尺寸。其實(shí),對圖片人為地改變尺寸會(huì)造成許多不好的后果,比如鋸齒的產(chǎn)生,但是為了讓大家了解onLoadInit事件的使用,我們將會(huì)這么做。

  4、然后,我們建立一個(gè)MCL對象,在第一幀輸入以下腳本:
  

var myMCL = new MovieClipLoader();//create an instance of MovieClipLoader

  aw附:這里我想羅索以下,關(guān)于Object的翻譯。因?yàn)樯鲜龃a的注釋中,老外用的是instance這個(gè)詞,直譯的話,Object是“對象”;Instance代表“實(shí)例”。前者更注重于其數(shù)據(jù)類型,而后者則更注重于其客觀存在性。

  5. 現(xiàn)在我們就可以部署腳本了,在第一幀:

  

myMCL.onLoadStart = function (targetMC)
{
var loadProgress = myMCL.getProgress(targetMC);
myTrace ("The movieclip " targetMC " has started loading");
myTrace("Bytes loaded at start=" loadProgress.bytesLoaded);
myTrace("Total bytes loaded at start=" loadProgress.bytesTotal);
}

  這個(gè)函數(shù)的第一行中申明了一個(gè)(對象類型的)變量,顯然,這個(gè)變量的值由myMCL對象的getProgress方法獲得.剛才已經(jīng)介紹了getProgress方法,這里可以看到,返回的loadProgress.bytesLoaded就是loadProgress對象的bytesLoaded屬性.
  這里我再啰嗦一句:為什么返回一個(gè)對象,而不返回具體的值。這是有原因的。函數(shù)返回值的功能使得程序設(shè)計(jì)更加完美,然而很多情況下,我們要返回的并非一個(gè)值,我們可能返回兩個(gè)或者更多的值,甚至它們的數(shù)據(jù)類型都不相同。這樣,只有通過對象的形式來返回了。這是解決問題最簡單最高效的方法。下面三句myTrace就呼應(yīng)了之前我們定義的監(jiān)控函數(shù),這樣就能看到我們關(guān)注的變量了。

  6、我們已經(jīng)為onLoadStart事件部署了相應(yīng)的工作,接下來我們要為上述其他事件部署工作了。緊接著是onLoadProgress,它接受三個(gè)參數(shù):targetMC, loadedBytes, totalBytes。分別代表目標(biāo)容器MC實(shí)例;已經(jīng)讀取的體積、總體積。

  

myMCL.onLoadProgress = function (targetMC, loadedBytes, totalBytes) {
myTrace ("movie clip: " targetMC);
myTrace("Bytes loaded at progress callback=" loadedBytes);
myTrace("Bytes total at progress callback=" totalBytes);
}

  7、我們的onLoadComplete方法僅接受一個(gè)參數(shù),它就是容器MC實(shí)例。像onLoadStart一樣,我們用getProgress方法來返回讀取情況。

  

myMCL.onLoadComplete = function (targetMC)
{
var loadProgress = myMCL.getProgress(targetMC);
myTrace (targetMC " has finished loading.");
myTrace("Bytes loaded at end=" loadProgress.bytesLoaded);
myTrace("Bytes total at end=" loadProgress.bytesTotal);
}

  8、onLoadInit方法將在所有加載的內(nèi)容被下載到本地容器MC中之后才開始執(zhí)行。這將使得你能更好的控制加載進(jìn)來的內(nèi)容的屬性。我選擇的圖片非常大,這樣我們可以把讀取過程看得更加清楚,而我也要對已經(jīng)加載的圖片尺寸進(jìn)行修整,讓它能全部顯示出來。

  

myMCL.onLoadInit = function (targetMC)
{
myTrace ("Movie clip:" targetMC " is now initialized");
targetMC._width = 170;
targetMC._height = 170;
}

  9、還有一個(gè)回調(diào)方法onLoadError。假如有錯(cuò)誤發(fā)生,它將會(huì)被觸發(fā)。作為一個(gè)優(yōu)秀的程序員,部署完善的應(yīng)用程序的時(shí)候,對錯(cuò)誤發(fā)生的避免措施是必不可少的!

  

myMCL.onLoadError = function (targetMC, errorCode)
{
myTrace ("ERRORCODE:" errorCode);
myTrace (targetMC "Failed to load its content");
}

  10、我們終于將最復(fù)雜的工作部署好了。接下來我們只用使用loadClip方法讀入我們需要的內(nèi)容就行了。loadClip方法的兩個(gè)參數(shù)分別是外埠資源的地址容器MC的實(shí)例。

  

  myMCL.loadClip("http://www.yourdomain.com/test1.swf","_root.myMC1");
myMCL.loadClip("http://www.yourdomain.com/test2.swf ", "_root.myMC2");
myMCL.loadClip("http://www.yourdomain.com/pic.jpg", "_level0.myMC3");
  路徑可以選擇相對路徑。注重,路徑的相對性也是一個(gè)大問題,當(dāng)SWF在非本路徑的HTML中被引用的時(shí)候,遵從HTML所在的路徑!這一點(diǎn)是很多Flash教程都忽視的。所以,有時(shí)候絕對路徑也有絕對路徑的好處。

  所有的調(diào)試工作最好在瀏覽器中,而非IDE中完成。而且腳本輸出方式必須是AS2。

  接下來,我將介紹實(shí)時(shí)調(diào)用MCL的情況。為了能適應(yīng)更多的應(yīng)用,我們經(jīng)常動(dòng)態(tài)地為MCL制定工作。

  aw話外音:有時(shí)候,我們這樣寫:

  1、var mcl:MovieClipLoader = new MovieClipLoader ();
  2、var mcl = new MovieClipLoader ();

  發(fā)現(xiàn)第一種寫法無法為MCL制定onLoadStart等事件方法。這是編譯器根據(jù)指定變量的數(shù)據(jù)類型產(chǎn)生的問題。osflash的一些朋友給了一些有用的觀點(diǎn),我也發(fā)現(xiàn)這個(gè)問題正好涉及到Flash內(nèi)部的事件響應(yīng)機(jī)制,不妨介紹一下:

  Flash的三種事件響應(yīng)機(jī)制

  1、簡單的回調(diào)函數(shù),最老的;
  2、偵聽器,ASBroadcaster,F(xiàn)lashMX時(shí)代;
  3、事件偵聽器,EventDispather,F(xiàn)lashMX2004時(shí)代

  這里,MCL用的是第二種機(jī)制,而整套V2組件則使用最后一套機(jī)制。

  附:MCL官方申明,注重:上述方法中,僅包含getProgress方法!

  

  intrinsic class MovieClipLoader
{
function MovieClipLoader();

   function addListener(listener:Object):Boolean;
function getProgress(target:Object):Object;
function loadClip(url:String, target:Object):Boolean;
function removeListener(listener:Object):Boolean;
function unloadClip(target:Object):Boolean;
}

  個(gè)人補(bǔ)充:1、2在不嚴(yán)格要求數(shù)據(jù)類型的時(shí)候可以通用。

  下面開始介紹用偵聽器來檢測MCL事件的方法。在此之前,我們解決一個(gè)最常見的問題,我們經(jīng)常會(huì)在論壇中看到有人這樣提問:

  引用:我動(dòng)態(tài)地建立了一些MC,并逐個(gè)分配給它們一個(gè)事件句柄(標(biāo)志)。然后,我將外埠資源讀取到它們之中。但是這些分配好的事件句柄都不工作了!
緊接著,發(fā)問人一般會(huì)貼出一對亂七八糟的代碼,并大呼救命。

  那么,我們首先來分析一下這個(gè)錯(cuò)誤發(fā)生的原因:當(dāng)外埠資源被載入到一個(gè)MC中時(shí),這個(gè)MC將會(huì)重新初始化。這意味著任何被預(yù)先制定好的代碼都將付之東流。對于開發(fā)人員已經(jīng)手動(dòng)在舞臺(tái)上安排好的MC則并沒有相關(guān)的麻煩,這是因?yàn)槿魏沃苯油ㄟ^onClipEvent制定到MC的代碼都能幸免被重新初始化。而動(dòng)態(tài)建立的MC則進(jìn)行上述的“初始化”,因?yàn)槲覀兪窃谶\(yùn)行中給它們配置的事件代碼。
  我們?nèi)绾伪苊膺@個(gè)問題呢?其實(shí)方法太多了,很多論壇也進(jìn)行了極為具體的討論,我就不多贅述了。
  你現(xiàn)在也許還記得剛才我介紹的“讀取外埠數(shù)據(jù)參與Flash應(yīng)用程序部署是一件非常重要和常見的工作,尤其是我們經(jīng)常需要檢測這些數(shù)據(jù)加載的進(jìn)度

  我們已經(jīng)介紹了MCL的幾個(gè)回調(diào)函數(shù),所以這里也不再贅述了。我們現(xiàn)在制作這樣一個(gè)效果:縮略圖標(biāo)式的圖片瀏覽系統(tǒng)。我們將要從外部讀取一些JPG圖片,將它們放入我們動(dòng)態(tài)部署的MC中。并且我們希望這些動(dòng)態(tài)建立的MC都具有各自的onPress事件。我們通過在MC裝載好外部資源之后再為之分配事件。

  在我們開始之前,我還想提醒大家注重一些經(jīng)常出現(xiàn)的疏漏:一定要在發(fā)布的時(shí)候設(shè)置成Flash7 AS2以上的版本;其次,用瀏覽器測試你的效果,而不是IDE;否則你將會(huì)得到希奇的結(jié)果。

  現(xiàn)在,我們開始編制代碼,你會(huì)發(fā)現(xiàn)它比你想象的要簡單得多。

  1、新建一個(gè)Flash文檔。
  2、找四張100*100像素的縮略圖片。
  3、建立一個(gè)動(dòng)態(tài)文本框,大概在300*300像素左右,使用12號(hào)字體,并使之現(xiàn)實(shí)邊框,這樣我們更好監(jiān)測。別忘了設(shè)置它為多行的。
  4、建立一個(gè)100X100像素的矩形,轉(zhuǎn)變?yōu)镸C,然后將它移出場景。這時(shí)候,他已經(jīng)出現(xiàn)在庫中了。在庫中,設(shè)置他的鏈接名為“img”,并使其“在第一幀導(dǎo)出”。其實(shí)這個(gè)矩形會(huì)在外部資源載入的時(shí)候被取代,現(xiàn)在只是為了調(diào)試方便。
  5、在剛才放置textBox文本框的層之上新建一層,這一層用于放置我們的代碼,先寫上:
  

stop();

  6、現(xiàn)在我們定義一個(gè)MCL的實(shí)例,此外定義一個(gè)基本對象,作為我們的偵聽器:
  

myMCL = new MovieClipLoader(); //define MovieClipLoader
myListener = new Object(); //define listener

  7、接下來我們用偵聽器來偵聽onLoadComplete事件,該事件的作用上文已經(jīng)提到了。我們現(xiàn)在把它交給listener對象,而不是MCL實(shí)例。當(dāng)然,最終要把偵聽器對象再交回MCL(以偵聽其回調(diào)函數(shù))的時(shí)候,得到的效果就是我們需要的效果了。

  記住,只有當(dāng)讀取完畢的時(shí)候,對MC部署事件任務(wù)才是安全可靠的!所以,在onLoadComplete被觸發(fā)的時(shí)候才部署這個(gè)onPress事件給MC:

myListener.onLoadComplete = function(targetMC){
debug.text = "LOADING OF " targetMC
" COMPLETE" newline;
targetMC.onPress = function() {
debug.text = newline
"targetMC = " targetMC._name;
}
}

  注:上述代碼中有幾行被人為打斷,但這并不影響效果。

  你也許已經(jīng)注重到了,MC的實(shí)例名稱在onLoadComplete被觸發(fā)的時(shí)候是作為一個(gè)參數(shù)的身份傳遞給onLoadComplete的,這樣我們控制這個(gè)MC就非常方便了。比如這里就可以用點(diǎn)擊MC來檢測事件是否被成功部署給MC。

  8、現(xiàn)在我們建立一個(gè)函數(shù),它包含一個(gè)簡單的循環(huán)來部署場景上的MC。并且及時(shí)地為每一個(gè)部署好的MC分配讀取外埠資源的任務(wù)(loadClip方法),代碼如下:

function initClips(){
for (i=1; i<=4; i ){
this.attachMovie("img", "img" i, i);
this["img" i]._x = i*110;
myMCL.loadClip("0" i ".jpg" ,
this["img" i]); //code wrapped
}
}

  9、到這里基本上就完成了�,F(xiàn)在我們剩下的工作就是注冊偵聽器并且按照需求調(diào)用相關(guān)函數(shù)、方法,反映到代碼上就是以下兩行:

myMCL.addListener(myListener);
initClips();

  注重這里的順序,我們的偵聽器對象在調(diào)用initClip()函數(shù)之前就被作用于MCL實(shí)例了。現(xiàn)在我們的MC的onPress事件可以順利工作了,因?yàn)楫?dāng)圖片被完全讀入之后,事件才被分配過去。我們的代碼也非常簡潔。我們再也不用為了loading而去制作麻煩的循環(huán)了,MovieClipLoader幫我們完成了所有工作!

  附:完整代碼如下:

  stop();
myMCL = new MovieClipLoader();
myListener = new Object();
myListener.onLoadComplete = function(targetMC)
{
targetMC.onPress = function ()
{
trace("pressed");
}
}
  function initClips()
{
for (i=1;i<=4;i )
{
this.attachMovie("img","img" i,i);
this["img" i]._x = i*110;
myMCL.loadClip(url,this["img" i]);
}
}
myMCL.addListener(myListener);
initClips();

  到此為止,你應(yīng)該相信MCL確實(shí)是一個(gè)不可多得的好東西了吧?

  下一節(jié)我們討論用V2組件項(xiàng)目做Flash loading的問題。

分享:Flash游戲制作:簡單射擊游戲教程(Fla源文件)
本游戲教程涉及自定義鼠標(biāo),鼠標(biāo)跟隨,鼠標(biāo)事件,簡單動(dòng)畫,文本框等方面,最終成品如下,游戲難度變化:假如你感愛好,先把所有源文件下載,然后對照文件看以

來源:awflasher.com//所屬分類:Flash教程/更新時(shí)間:2008-03-05
相關(guān)Flash教程