[flash] 多圖動態載入

來源:互聯網
上載者:User
來自:http://www.healdream.com/blog/article.asp?id=150

查看效果:Flash動畫線上播放

更新了源檔案,希望能給大家帶來協助:)

本以為網上這樣的教程多的是,隨便一抓就是一大把,結果不甚理想,不過也看到了一些有用的文章。

還是自己動手豐衣足食吧,我們知道MovieClipLoader載入單圖,還是比較簡單的,但如果是多圖呢,如何建立監聽?如何在一副圖片載入完後load下一張圖片?如何與XML結合?

讓我們一個一個來,首先是監聽的問題,這麼多圖,不能建立n個object,然後分別對這幾個object監聽,效率太低,所以只能建立一個監聽,餘下的任務就是如何?多圖載入了。

基本思路:

先給id賦值1,然後通過判斷id與總圖片數的大小,來決定是否載入下一張圖片就像這樣: 程式碼myObj.onLoadComplete = function() {
    if (id<=nums) {//一個圖片載入完成後,判斷id與nums的值,如果小於nums繼續載入
        id++;
        loadpic(id);
    }
};

然後在loadpic(id)函數裡執行 程式碼myCL.loadClip(imgurl, loadpic_mc);

就可以繼續載入了。

最後是與XML結合的問題,其實也滿簡單的,當載入完外部xml時,執行相應的函數就行了,就像這樣: 程式碼myXML.onLoad = function(suc) {
    if (suc) {
        loadStart();//載入完成後執行loadStart函數
    }
};

基本思路就是這樣,貼上源碼: 程式碼var id = 1;
var myXML:XML = new XML();
myXML.ignoreWhite = true;
myXML.load("list.xml");//載入xml
myXML.onLoad = function(suc) {
    if (suc) {
        loadStart();//載入完成後執行loadStart函數
    }
};
var myObj:Object = new Object();
myObj.onLoadComplete = function() {
    if (id<=nums) {//一個圖片載入完成後,判斷id與nums的值,如果小於nums繼續載入
        id++;
        loadpic(id);
    }
};
myObj.onLoadInit = function(tar) {//載入完成後,設定圖片大小
    tar._width = 85;
    tar._height = 53;
    tid = id-1;
    //將loading和灰色背景設為不可見,並給按鈕加上事件
    //這裡有個小技巧就是將tid賦予_btn.pid;方便將來調用
    _root["loader"+tid+"_mc"].loading_mc._visible = false;
    _root["loader"+tid+"_mc"].bg1_mc._visible = false;
    _root["loader"+tid+"_mc"]._btn.pid = tid;
    _root["loader"+tid+"_mc"]._btn.onRelease = function() {
        ttid = this.pid;
        url = myList[ttid].childNodes[0];//取得xml檔案對應的url
        getURL(url);
    };
};
var myCL:MovieClipLoader = new MovieClipLoader();
function loadStart() {
    myList = myXML.firstChild.childNodes;
    nums = myList.length;//得到圖片數
    for (var i = 1; i<=nums; i++) {//複製庫裡的mc,並將其置於舞台上,分配好各自的座標
        _root.attachMovie("bg_loader", "loader"+i+"_mc", 100+i);
        _root["loader"+i+"_mc"]._x = (i%5 == 0) ? 450 : (10*(i%5)+100*(i%5-1));
        ty=i%5 == 0 ? (Math.floor(i/5-1)*80) : (Math.floor(i/5)*80);
        _root["loader"+i+"_mc"]._y = 10+ty
    }
    myCL.addListener(myObj);//設定監聽
    myCL.loadClip("imgs/small01.jpg", _root.loader1_mc.loadpic_mc);//載入第一副圖片
}
function loadpic(id) {
    //取得xml檔案裡相應的圖片地址
    imgurl = myList[id-1].attributes.path;
    myCL.loadClip(imgurl, _root["loader"+id+"_mc"].loadpic_mc);
}

看看效果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.