我有这个错误,不知道为什么会出现这种错误,我相信它的范围有问题。因为我已经添加了Child。我甚至无法删除Child,在循环中添加了子项,我不确定如何操作从外部添加到循环内的子项(在循环结束后)。
我正在尝试将循环内的子项添加到视口中,但我正在使用removeChild演示问题以减少复杂性。因为我试图找出为什么它给我这个错误的原因,并试图了解我应该做什么。
谢谢你的时间!
for (var j:int = 5; j < somedata.length; j++)
{
if(somedata[j]){
var myLoader:Loader = new Loader();
var image:Bitmap;
var url:URLRequest = new URLRequest("http://www.rentaid.info/rent/"+somedata[j]);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
myLoader.load(url);
function onImageLoaded(e:Event):void {
image = new Bitmap(e.target.content.bitmapData);
var mw:Number = bf.width*2;
var mh:Number = bf.height*1.2;
image.y = bf4.y+25;
/* if you set width and height image same with the stage use this */
image.width = mw;
image.height = mh;
var _contentHolder: Sprite;
addChild(_contentHolder);
_contentHolder.addChild(image);
}
}
removeChild(_contentHolder);
}
编辑:
function LoadImages() : void {
for (var j:int = 5; j < somedata.length; j++) {
var image:Bitmap;
myLoader = new Loader;
var urlRequest : URLRequest = new URLRequestfor ("http://www.rentaid.info/rent/"+somedata[j])
myLoader.load(urlRequest);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadComplete);
}
}
function LoadComplete(event : Event) {
_contentHolder.addChild(image);
}
或类似的东西?
var loadedArray:Array = new Array();
var counter:int=0;
function loadImage():void{
var loader:Loader = new Loader();
var image:Bitmap;
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
loader.load(new URLRequest("http://www.rentaid.info/rent/"+somedata[counter]));
function onImageLoaded(e:Event):void {
image = new Bitmap(e.target.content.bitmapData);
loadedArray.push(e.target.content);
if(counter == somedata.length-1){
for(var i:uint = 5; i < somedata.length; i++){
image[i].x = 0 + i * 100;
addChild(_contentHolder);
_contentHolder.addChild(image[i]);
currentY += _contentHolder.height + 10;
}
}
else{
counter++;
loadImage();
答案 0 :(得分:0)
您没有定义_contentHolder。目前,您还没有addChild(_contentHolder)。这就是removeChild行抛出错误的原因 此外,您不需要addChild(image),然后将图像添加为_contentHolder的子项。其中一个会做。事实上,DisplayObject只能位于显示器树的一个位置。如果您想将图像作为_contentHolder的子图像,则只需要_contentHolder.addChild(图像)。
如果您希望将所有图像实例添加到SAME _contentHolder中,最好在for循环中声明并实例化_contentHolder OUTSIDE;然后,每个foor循环迭代将您的图像添加到同一个Sprite对象。当您删除_contentHolder时,子图像也将消失(尽管它们仍然是_contentHolder的子项)。
理想情况下,您不应该像在for循环中那样异步操作多个Loader。而不是使用for循环,创建一个变量来跟踪您最多的索引值,并在每个图像加载时,递增该值并使用它来检查是否所有图像都已加载。如果没有,请加载下一个。这将要求代码的Loader部分位于其自己的函数中,如果需要加载另一个图像,则该函数最初从onImageLoaded调用AND。
同样,跟踪哪个索引的变量最初需要设置,并在每个图像加载时递增。
回复您编辑过的问题:
加载当前图像后,您的第一个新代码示例不会尝试加载NEXT图像。另外,作为提示:函数名称通常不以大写字母开头;这可以防止与类定义混淆 此外,您的第一个新代码示例并未调用“LoadImages&#39;函数初始加载第一个图像。
你的第二个例子看起来应该对我有用。你真的试过这个版本吗?
我唯一建议的是使用其他变量定义您的Loader并删除&#39;已加载的&#39;中的Event.COMPLETE侦听器。功能。添加事件侦听器时,您还可以添加:
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
监听器并跟踪每个图像的进度。
我还建议在整个代码中添加跟踪语句,以查看它被卡住的位置。