0

我正在开发一个项目,该项目正在运行时在另一个 png(png2) 图像(之前放置的)前面加载 png(png1)

我已经这样做并且它工作正常,问题是在一段时间后 png1 对背景透明,即使 png2 放置在 png1 和背景的中间,下面我附上了问题和代码的屏幕截图。

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

如果有人能给我一个关于这有什么问题的线索,将不胜感激。

4

1 回答 1

0

每次加载新文件时都需要替换 png1。最好检查文件是否仍然相同,以免每秒一次又一次地下载。png2停止显示的原因正是因为您在png2前面有太多透明层。我记得有 24 张带有 alpha 通道的图片彼此重叠导致我失去了一些原本可见的背景。为了解决您的问题,我说您Sprite明智地在 png2 层前面添加一个容器,然后您可以清除该容器的所有子级以删除过时imageLoader的 s,然后添加新下载的图片。与此相符的东西:

// 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);
}

请注意,此代码不处理下载错误。

于 2018-12-05T12:47:45.597 回答