我正在一个项目,该项目正在运行时在另一个png(png2)图像(放置在较早位置)之前加载png(png1)
我已经做到了,它可以正常工作,问题是一段时间后png1透明化到背景,甚至是放置在png1和背景中间的png2,下面也附上了问题和代码的屏幕截图。
import flash.net.URLLoader;
import flash.net.URLRequest;
var fl_TimerInstance: Timer = new Timer(1000);
fl_TimerInstance.addEventListener(TimerEvent.TIMER, fl_TimerHandler);
fl_TimerInstance.start();
var fl_SecondsElapsed: Number = 1;
function fl_TimerHandler(event: TimerEvent): void {
var imageLoader: Loader = new Loader();
var image: URLRequest = new URLRequest("C:\\Users\\Public\\Pictures\\pic.png"); //png1 = pic.png
imageLoader.load(image);
Zerolocation.addChild(imageLoader);
}
屏幕截图:
错误之前-https://drive.google.com/file/d/19a0t2jEGfDoX2voQ96rap4XpvDlGMWBd/view?usp=sharing
错误-https://drive.google.com/file/d/1a--EIEXz2Qzt5SBfl8Y8SxDIAG3DkYZf/view?usp=sharing
时间轴-https://drive.google.com/file/d/1s2uPSpOYAcfEJqdNqD4QpDGla8Gvs5LC/view?usp=sharing
如果有人能给我一个关于这是什么问题的线索,将不胜感激。
答案 0 :(得分:0)
每次加载新文件时都需要替换png1。最好是,如果您要检查文件是否仍然相同,以免每秒下载一次。停止显示png2的原因完全是因为png2前面的透明层过多。我记得有24张图片,彼此之间有alpha通道,这使我失去了一些本来可以看到的背景。为了解决您的问题,我说您在png2图层前面添加了一个Sprite
容器,然后您可以清除该容器的所有子级以删除过时的imageLoader
,然后添加新下载的图片。与此相符的东西:
// Zerolocation has a child named "runtimePic" to place loaded pics
var didWeLoad:Boolean=true;
function fl_TimerHandler(event: TimerEvent): void {
if (!didWeLoad) return; // why downloading more while we haven't finished?
var imageLoader: Loader = new Loader();
var image: URLRequest = new URLRequest("C:\\Users\\Public\\Pictures\\pic.png"); //png1 = pic.png
imageLoader.load(image);
imageLoader.addEventListener(Event.COMPLETE,loaded);
didWeLoad=false;
}
function loaded(e:Event):void {
didWeLoad=true; // allowing more downloading
e.target.removeEventListener(Event.COMPLETE,loaded); // clean up, or else you'll leak memory
// remove old pic(s)
Zerolocation.runtimePic.removeChildren();
// and now add new pic
Zerolocation.runtimePic.addChild(e.target);
}
请注意,该代码不会处理下载错误。