如何添加循环的URLRequest图像并将它们添加到1个视口?

时间:2014-04-23 10:40:45

标签: actionscript-3 flash actionscript

我正在尝试循环(通过URLRequest从Loader添加图像),并将图像添加到contentHolder,然后将所有这些在contentHolder中的图像放入视口中。但目前我必须将添加图像放入循环内的视口步骤,因此它会产生一个问题,即每个循环,添加一个视口。所以10个视口相互重叠。我在调试模式下测试它,当第一个图像被加载时,我可以快速滑动它,因为视口有一个滚动窗格,然后添加第二个图像,我可以滑动那个,第三个添加在顶部等。

但是,如果我将添加持有者放在循环外的视口步骤,它会给我错误错误#2007:参数child必须是非null,我不知道该怎么做。请帮忙,谢谢你的时间!我已经尝试了6个小时了!

错误在于viewport.addChild(_contentHolder1);如果滚动到底部,这是代码的最后一部分。

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

编辑:

 var loadedArray:Array = new Array();
                    var counter:int=0;

                    function loadImage():void{
                    for (var j:int = 5; j < somedata.length; j++) 
                       {
                    if(somedata[j]){
                     var loader:Loader = new Loader();
                        var image:Bitmap;
                    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,  onImageLoaded);
                        loader.load(new URLRequest("http://www.rentaid.info/rent/"+somedata[j][counter]));



                        }
    }
    }






                        function onImageLoaded(e:Event):void {




                         loadedArray.push(e.currentTarget.loader.content as Bitmap);

           if(counter == somedata.length-1){    
        var _contentHolder: Sprite = new Sprite;
           addChild(_contentHolder);
               for(var i:uint = 5; i < loadedArray.length; i++){



                    _contentHolder.addChild(loadedArray[i]);
                        currentY += _contentHolder.height + 10;

               }    
           }

           else{
               counter++;
               loadImage();
    }
 var viewport:Viewport = new Viewport();

                viewport.y = 0;

                viewport.addChild(_contentHolder);


            var scroller:TouchScroller = new TouchScroller();
            scroller.width = 300;
            scroller.height = 265;
            scroller.x = 10;
            scroller.y = 100;
            scroller.viewport = viewport;
            addChild(scroller);
}

1 个答案:

答案 0 :(得分:0)

您可以使用Starling Framework和加载器循环,例如:

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