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

FlashActionscript學(xué)習(xí):MovieClipLoader深入研究_Flash教程

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

推薦:用 JavaScript 控制 Flash 播放器的方法匯總
說明:含例句的方法我已作了測試。播放動畫:Play()例:(網(wǎng)頁中的Flashid).Play();停止動畫:StopPlay()動畫是否正在播放:IsPlaying()跳轉(zhuǎn)到某幀:Goto

使用moviecliploader下載過多的位圖會帶來計算機(jī)網(wǎng)絡(luò)連接的擁塞,即使使用unloadClip方法取消下載,仍然不會有好轉(zhuǎn),引起這個現(xiàn)象的原因與這個類的實現(xiàn)細(xì)節(jié)有關(guān)系,我們雖然不能看到其實現(xiàn)的原理,但是通過它的表現(xiàn),可以對其特性有所熟悉。

MovieClipLoader可以勝任一般的應(yīng)用,但是對于一些大量的下載任務(wù),假如使用不當(dāng),可能帶來嚴(yán)重的網(wǎng)絡(luò)負(fù)擔(dān)和非常差的用戶體驗。

public loadClip(url:String, target:Object) : Boolean

首先需要指出的是,loadClip方法對于Flash編程人員來說是多線程的,不管其內(nèi)部實現(xiàn)機(jī)制如何,一個事實可以證實這一點:我們可以使用loadClip方法同時下載多個圖片,并把不同的圖片放在不同或者相同的電影剪輯當(dāng)中。(文檔中僅僅指出可以放在同一個剪輯當(dāng)中)。

第二點,MovieClipLoader.onLoadStart處理函數(shù)并不是調(diào)用loadClip后會立即觸發(fā)。文檔稱,當(dāng)被加載的剪輯或者圖片的第一個字節(jié)被寫入用戶磁盤中時,此函數(shù)被調(diào)用。可以確定,當(dāng)網(wǎng)絡(luò)連接不可用或者被下載資源不可用的時候就可能用原不會觸發(fā)此事件。

public unloadClip(target:Object) : Boolean

此方法是我們討論的核心所在。官方loadClip文檔稱:“使用 MovieClipLoader.unloadClip() 可刪除用此方法加載的影片或圖像,或者取消正在進(jìn)行中的加載操作。”我們知道,loadClip方法是需要占用網(wǎng)絡(luò)連接核內(nèi)存資源的,我們寄希望于一旦調(diào)用unloadclip則立即釋放網(wǎng)絡(luò)連接和內(nèi)存資源。但是事與愿違!這是MovieClipLoader方法的要害問題。當(dāng)AS調(diào)用MovieClipLoader.unloadClip()之后,并不一定會馬上釋放資源。當(dāng)我們使用MovieClipLoader下載大量的圖片的時候,雖然我們在調(diào)用unloadClip之后才下載新的圖片,但是網(wǎng)絡(luò)連接的使用將進(jìn)一步累積增大,導(dǎo)致網(wǎng)絡(luò)連接的暫時阻塞。

經(jīng)過測試,調(diào)用loadClip方法之后,立即調(diào)用unloadClip方法是絲毫不起作用的,下載過程會繼續(xù)進(jìn)行,并且MovieClipLoader類的事件處理函數(shù)仍然會被調(diào)用。這看起來非常出乎人的意料之外!而且非常不合理,但是事實就是如此。另外,假如手動將被加載對象的目的剪輯刪除(unloadMovie或者removeMovieClip),這將刪除舞臺上的剪輯,但是仍然不能釋放MovieClipLoader所占用的資源。

事實證實,當(dāng)MovieClipLoader.onLoadComplete被調(diào)用之后,再次使用unloadClip方法,將會刪除被加載的剪輯,但是同時網(wǎng)絡(luò)連接的占用也會被釋放。但是這樣做的并沒有太大的意義,因為圖片一旦開始下載,資源消耗是不可消除的,但這恰又是要害的資源。這段無意義的資源占用會字節(jié)導(dǎo)致用戶計算機(jī)的網(wǎng)絡(luò)阻塞,表現(xiàn)為上網(wǎng)速度忽然降低,幾秒鐘之后恢復(fù)正常(這要看用戶的網(wǎng)絡(luò)速度如何以及同時下載的圖片數(shù)有多大)。

unloadClip的存在的另外一個問題是MovieClipLoader.onLoadError事件的觸發(fā)問題。官方文檔指出:“假如您在正加載影片時發(fā)出此命令,則調(diào)用 MovieClipLoader.onLoadError。”但是通過我的測試,不論何時調(diào)用了unloadClip方法,MovieClipLoader.onLoadError都不會被觸發(fā)!這是另一個非常驚人的現(xiàn)象!

現(xiàn)在我還沒有找到一個方法,可以徹底的從內(nèi)存中刪除一個對象。我們知道,as是使用垃圾收集機(jī)制來治理內(nèi)存的,我們并不能直接調(diào)用垃圾收集動作,也就是說,大多數(shù)時候,我們設(shè)置一個對象的唯一引用為null,那么可以判定這個對象已經(jīng)符合垃圾收集的條件,但是這個對象并不會立即被破壞,它所占用的內(nèi)存和其他資源并不會立即被釋放。因此,我們沒有辦法在所有時候立即釋放MovieClipLoader所占用的資源。

onLoadInit = function([target_mc:MovieClip]) {}

這里需要補(bǔ)充一點:onLoadInit是在調(diào)用被加載剪輯的第一幀的代碼之后被觸發(fā)。onLoadCompelete觸發(fā)是在被加載對象的最后一個字節(jié)被寫入用戶磁盤的時候被調(diào)用,在此之后和onLoadInit之前,被加載對象的內(nèi)部數(shù)據(jù)是不可用的。然而,這里的內(nèi)部數(shù)據(jù)指的是被加載對象的幀代碼以及其子剪輯,被加載對象本身的屬性和方法是有效的!也就是說,將圖片加載到mc中的過程中的任何時候,mc._x是始終可以被使用的。

最終結(jié)局

我使用sniffer觀察IP數(shù)據(jù)包之后,發(fā)現(xiàn)多個MovieclipLoader會共用TCP:http網(wǎng)絡(luò)連接,只要前一個任務(wù)下載完畢,就可以釋放連接給下一個任務(wù)使用,這是MovieclipLoader實現(xiàn)中非常明智的地方。但是假如尚沒有任務(wù)下載完畢,也就是沒有空閑TCP:http網(wǎng)絡(luò)連接,就會創(chuàng)建新連接,舊鏈接在任務(wù)完成或者其他很短的時間內(nèi)被作廢,通過觀察發(fā)現(xiàn),無論多少個MovieClipLoader同時下載多少個任務(wù),并發(fā)使用中的網(wǎng)絡(luò)連接數(shù)最多是10,但是已經(jīng)開啟卻不再使用了的網(wǎng)絡(luò)鏈接這可能很多。假如不斷下載新圖片并且在舊尚未下載完之前移除target_mc,由于無法立即釋放這些被刪除的圖片所占用的TCP:http網(wǎng)絡(luò)連接,那么會導(dǎo)致每添加一個新下載任務(wù)都會創(chuàng)建新連接,舊鏈接被作廢。這樣一來,無用的網(wǎng)絡(luò)鏈接占用就會很多,導(dǎo)致網(wǎng)絡(luò)阻塞。

重用網(wǎng)絡(luò)連接的唯一方法:永遠(yuǎn)不要在onLoadCompelete完成之前刪除一個被加載的圖片;決定要下載一個新圖片時要確定是否真的必須下載。

至此MovieclipLoader的要害問題就很明顯了:MovieclipLoader類沒有提供立即釋放網(wǎng)絡(luò)連接的方法,這是問題的根源。

分享:問答整理:在Flash動畫影片中怎樣使MC倒放?
問:怎樣使MC倒放,從100幀放到第1幀停止,通過按鈕控制正常播放MC,或倒放MC?如圖:答:方法1、把這段代碼加到倒放那個按鈕去就可以了:(棄天笑提供)on

/所屬分類:Flash教程/更新時間:2008-03-05
相關(guān)Flash教程