自从我开发一些应用程序以来,我遇到了 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/