xml - ActionScript 3.0 如何使用从 XML 加载的多个文件在 for 循环中创建 ProgressEvent 实例

标签 xml actionscript-3 for-loop progress preloader

自从我开发一些应用程序以来,我遇到了 ProgressEvent.PROGRESS 的一些问题。我尝试将此事件分配给从 XML 数据加载的每个图像。最后调用的每个图像都会正确预加载。问题是以前的每一个都没有。我试图找出这个解决方案: Problem with progressEvent Listener但可能我在某个地方犯了错误。

这是我的代码:

var total_columns_preview = myXML.table[companyNumber].column.length();         
for (var p:int=0; p < total_columns_preview; p++) 
{

    var foto_nest:String = myXML.table[companyNumber].column[p]<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="99b7d9f7f8f4fcb7edf6caedebf0f7fe" rel="noreferrer noopener nofollow">[email protected]</a>();   
    var foto_name:String = myXML.table[companyNumber].column[p].toString(); 
    if (foto_nest == "foto") 
    {
        var foto_icon_mc = new image(); 
        images_container_mc.addChild(foto_icon_mc);
            if (foto_name != "") {

        var varrLoadersFoto:Loader = new Loader();
            varrLoadersFoto.name = "image"+p; 
            varrLoadersFoto.load(new URLRequest("igwodociagi/min_pic/min/"+foto_name));
            varrLoadersFoto.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressLoadFoto);
            varrLoadersFoto.contentLoaderInfo.addEventListener(Event.COMPLETE, onFotoLoaded);
            foto_icon_mc.photo_container.addChild(varrLoadersFoto);                                         
                var preloader:MovieClip = new preloader_mc();
                foto_icon_mc.addChild(preloader);                               
                images_container_mc.addChild(foto_icon_mc);

            }               
    }   
}

    function onFotoLoaded(event:Event) {

            event.target.content.smoothing = true;
            preloader_foto_dimm = new Tween(preloader, "alpha", Strong.easeOut, 1, 0, 0.6, true);
            immage_foto_undim = new Tween(event.target.content, "alpha", Strong.easeOut, 0, 1, 0.6, true);


    }               

    function progressLoadFoto(e:ProgressEvent) {

            var percent:Number = e.bytesLoaded / e.bytesTotal * 100;
            preloader.logo_preload.text = (Math.floor(percent) / 100) + "%";                                                        
            preloader.preload_box.scaleX = (Math.floor(percent) / 100);


    }

我的问题是如何将事件单独分配给每个图像,以便预加载器将为每个图像进行更新。

最佳答案

对于寻求解决方案的人来说,这就是 https://stackoverflow.com/users/1206613/cherniv 的实现。我听从了他的建议。 “不要在 for 循环中加载它们,而是在上一个 onFotoLoaded 之后加载下一个”

    var total_columns_preview = myXML.table[companyNumber].column.length();
for (var p:int=0; p < total_columns_preview; p++){
    var foto_nest:String = myXML.table[companyNumber].column[p]<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="76583618171b135802192502041f1811" rel="noreferrer noopener nofollow">[email protected]</a>();
    var foto_name:String = myXML.table[companyNumber].column[p].toString();
    if (foto_nest == "foto"){
        //loading object from library
        var foto_icon_mc = new image(); 
        loadPictures();
    }
}
function loadPictures(){
    var varLoadersFoto:Loader = new Loader();
        varLoadersFoto.contentLoaderInfo.addEventListener(Event.INIT, initLoadFoto);
        varLoadersFoto.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressLoadFoto);
        varLoadersFoto.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedFoto);
        varLoadersFoto.load(new URLRequest("igwodociagi/min_pic/min/"+foto_name));
        foto_icon_mc.photo_container.addChild(varLoadersFoto);
            //loading preloader object from library
            var preloader:MovieClip = new preloader_mc(); 
            foto_icon_mc.addChild(preloader);
    function initLoadFoto(e:Event):void{
        //here i place where photo should be visible (x, y - possition)
    }
    function progressLoadFoto(e:ProgressEvent){
        var percent:Number = e.bytesLoaded / e.bytesTotal * 100;
        preloader.logo_preload.text = (Math.floor(percent) / 100) + "%";
        preloader.preload_box.scaleX = (Math.floor(percent) / 100);
    }
    function onLoadedFoto(e:Event){
        //smoothing loaded content (bitmap) if dimentions of loaded file are too big
        e.target.content.smoothing = true; 
        preloader_foto_dimm = new Tween(preloader,"alpha",Strong.easeOut,1,0,0.6,true);
        immage_foto_undim = new Tween(e.target.content,"alpha",Strong.easeOut,0,1,0.6,true);
    }
}

谢谢。希望对某人有所帮助。

关于xml - ActionScript 3.0 如何使用从 XML 加载的多个文件在 for 循环中创建 ProgressEvent 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16750074/

相关文章:

actionscript-3 - 在 AS3 中嵌入字体 - 动态文本字段消失

java - 将数组压缩为数字

html - 使用 for 循环或 lapply 将 Web 抓取到具有相似 URL 的 R 多个链接

java - NestedScrollView 内的 ViewPager 内的 RecyclerView - 效果不佳

actionscript-3 - Actionscript3.0 - 为什么Math.cos(35.26)的值为负?

xml - XSLT - 从 URL 获取文件名

flash - 避免在Flash CS3中将光标更改为动态文本字段

javascript - for循环不修改全局变量?

java - XMLGregorianCalendar 类型的 Joda 日期时间格式

c++ - 是否有适用于 Windows 的优秀 C++ XML DOM 教程?