Actionscript 3 如何添加循环URL请求图像并将其添加到1个视口?
我尝试循环(通过URLRequest从加载程序添加图像),图像被添加到contentHolder,然后我将contentHolder中的所有图像放置到视口中。但现在我必须把“将图像添加到视口”步骤放在循环中,所以它会产生一个问题,即每个循环都会添加一个视口。所以10个视口相互重叠。我在调试模式下对它进行了测试,当加载第一个图像时,我可以快速滑动它,因为视口有一个滚动窗格,然后添加第二个图像,我可以滑动该图像,然后在顶部添加第三个图像,等等 但是如果我将addholder-to-viewport步骤放在循环之外,则会出现错误#2007:参数child必须为非null,我不知道该怎么办。请帮忙,谢谢你的时间!我已经试了6个小时了 错误出现在line viewport.addChild(_contentHolder1);这是代码的最后一部分,如果滚动到底部Actionscript 3 如何添加循环URL请求图像并将其添加到1个视口?,actionscript-3,flash,actionscript,Actionscript 3,Flash,Actionscript,我尝试循环(通过URLRequest从加载程序添加图像),图像被添加到contentHolder,然后我将contentHolder中的所有图像放置到视口中。但现在我必须把“将图像添加到视口”步骤放在循环中,所以它会产生一个问题,即每个循环都会添加一个视口。所以10个视口相互重叠。我在调试模式下对它进行了测试,当加载第一个图像时,我可以快速滑动它,因为视口有一个滚动窗格,然后添加第二个图像,我可以滑动该图像,然后在顶部添加第三个图像,等等 但是如果我将addholder-to-viewport步
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 currentY:int = 10;
var h = image.height;
var k=image.width/image.height;
_contentHolder = new Sprite();
_contentHolder.y = currentY;
currentY += _contentHolder.height + 10;
addChild(_contentHolder);
_contentHolder.addChild(image);
for (var j:int = 5; j <somedata.length; j++)
{
_contentHolder1 = new Sprite();
addChild(_contentHolder1);
_contentHolder1.addChild(_contentHolder);
var viewport:Viewport = new Viewport();
viewport.y = 0;
viewport.addChild(_contentHolder1);
var scroller:TouchScroller = new TouchScroller();
scroller.width = 300;
scroller.height = 265;
scroller.x = 10;
scroller.y = 100;
scroller.viewport = viewport;
addChild(scroller);
}
}}
for(var j:int=5;j 对于(var j:int=5;j您可以使用Starling框架和加载程序循环,例如:
private var count:uint = 0; //add this in your class
private var imagesVector:Vector.<Image> = new Vector.<Image>(); //add this in your class
private var imagesUrlVector:Vector.<String> = new <String>["url1","url2","url3","etc"]; //add this in your class
private function loadImages():void
{
//create the loader
var loader:Loader = new Loader();
//when texture is loaded
loader.contentLoaderInfo.addEventListener ( Event.COMPLETE, onComplete );
//load the texture
loader.load( new URLRequest (imagesUrlVector[count]));
}
private function onComplete ( e : Event ):void
{
// grab the loaded bitmap
var loadedBitmap:Bitmap = e.currentTarget.loader.content as Bitmap;
// create a texture from the loaded bitmap
var texture:Texture = Texture.fromBitmap ( loadedBitmap );
var card:CustomImage = new CustomImage(texture);
imagesVector.push(card);
trace("load image number" + count);
count++;
if (count < imagesUrlVector.length) {
loadImages();
} else displayImages();
}
private function displayImages():void {
var x:uint = 150;
var i:Number;
for (i = 0; i < cardVector.length; i++ )
{
x += 100;
imagesVector[i].x = x;
addChild(imagesVector[i]);
}
}
private var count:uint=0;//将其添加到类中
private var imagesVector:Vector.=新向量。;//将其添加到类中
私有变量ImageSurvector:Vector.=new[“url1”、“url2”、“url3”、“etc”];//将其添加到类中
私有函数loadImages():void
{
//创建加载程序
变量加载器:加载器=新加载器();
//加载纹理时
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
//加载纹理
load(新的URLRequest(imagessurlvector[count]);
}
完成的私有函数(e:事件):无效
{
//抓取加载的位图
var loadedBitmap:Bitmap=e.currentTarget.loader.content作为位图;
//从加载的位图创建纹理
var-texture:texture=texture.fromBitmap(loadedBitmap);
var卡:CustomImage=新CustomImage(纹理);
imagesVector.push(卡);
跟踪(“加载图像编号”+计数);
计数++;
if(计数
我可以添加一个事件监听器来解决这个问题吗?有人想帮忙吗?如果我有一个事件监听器,当addChild完成后,我会将contentHolder添加到viewport?你的代码太乱了,我甚至无法理解你想做什么。试着使用表格。谈论addChild-这是同步操作,可以这意味着它立即完成。我对编码不太熟悉,不太清楚什么是整洁的还是凌乱的,对此表示抱歉。我只是尝试使用URLRequest在循环中加载图像,然后将它们添加到视口中。如果addChild立即完成,我想知道,如果我添加child,为什么它仍然会说参数child必须为非null,而仅添加child wa它添加到循环中,我尝试将子对象添加到循环外的视口中。我只是想知道,如果没有框架,是否可以执行我想要执行的操作?这会执行相同的结果吗?try应该依赖于此(不使用框架)当前位置如果我的答案对你有帮助,请选择我的答案Hi Roran,我仍在努力哈哈抱歉,我仍无法解决问题,我今天已经尝试了6个多小时,仍然无法解决问题。解决问题后我会选择你的答案。我刚刚在上面发布了我一直在努力的代码,现在没有错误,但是它不显示图像。
private var count:uint = 0; //add this in your class
private var imagesVector:Vector.<Image> = new Vector.<Image>(); //add this in your class
private var imagesUrlVector:Vector.<String> = new <String>["url1","url2","url3","etc"]; //add this in your class
private function loadImages():void
{
//create the loader
var loader:Loader = new Loader();
//when texture is loaded
loader.contentLoaderInfo.addEventListener ( Event.COMPLETE, onComplete );
//load the texture
loader.load( new URLRequest (imagesUrlVector[count]));
}
private function onComplete ( e : Event ):void
{
// grab the loaded bitmap
var loadedBitmap:Bitmap = e.currentTarget.loader.content as Bitmap;
// create a texture from the loaded bitmap
var texture:Texture = Texture.fromBitmap ( loadedBitmap );
var card:CustomImage = new CustomImage(texture);
imagesVector.push(card);
trace("load image number" + count);
count++;
if (count < imagesUrlVector.length) {
loadImages();
} else displayImages();
}
private function displayImages():void {
var x:uint = 150;
var i:Number;
for (i = 0; i < cardVector.length; i++ )
{
x += 100;
imagesVector[i].x = x;
addChild(imagesVector[i]);
}
}