通过XML自动滚动图像

通过XML自动滚动图像,xml,flash,actionscript,actionscript-2,Xml,Flash,Actionscript,Actionscript 2,我在下面有一张纸条,我通过XML调用了一些图像,并创建了一个库,它每3秒钟向左移动一次,自动传递图片。但是我的图像宽度不同,高度相同 var dados:XML = new XML(); dados.ignoreWhite = true; dados.load("xml/" + _root.xmlport); dados.onLoad = function():Void { qtd = this.childNodes[0].childNodes.length; _root.qu

我在下面有一张纸条,我通过XML调用了一些图像,并创建了一个库,它每3秒钟向左移动一次,自动传递图片。但是我的图像宽度不同,高度相同

var dados:XML = new XML(); dados.ignoreWhite = true; dados.load("xml/" + _root.xmlport); dados.onLoad = function():Void { qtd = this.childNodes[0].childNodes.length; _root.qualqtd = this.childNodes[0].childNodes.length; for (j = 0; j @= qtd; j++) { mcPanels.item_mc.duplicateMovieClip("item_mc" + j,mcPanels.getNextHighestDepth()); mcPanels["item_mc" + j].imagem = this.childNodes[0].childNodes[j].childNodes[0].attributes.imagem; mcPanels["item_mc" + j].tamanho = this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto; mcPanels["item_mc" + j].foto.loadMovie(mcPanels["item_mc" + j].imagem); mcPanels["item_mc" + j]._x = j * mcPanels["item_mc" + j].tamanho; mcPanels["item_mc" + j]._y = 0; } }; var i:Number = 0; var easing:Number = 0.2; var clipNum:Number = _root.qualqtd; var myInterval = setInterval(moveIt, 3000); var dir:Number = 1; function moveIt() { if (dir == 1) { targX = Math.floor(mcPanels._x - 450); i++; if (i == clipNum) { dir = -dir; } } else if (dir == -1) { targX = Math.floor(mcPanels._x + 450); i--; if (i == 0) { dir = -dir; } } onEnterFrame = function () { var dx:Number = Math.floor(targX - mcPanels._x); mcPanels._x += dx * easing; if (Math.abs(dx) @ .5) { mcPanels._x = targX; delete onEnterFrame; } }; } 它的值是450,这是我给他的值 搬家,我知道这是应该改变的,但不知道如何

有人能帮我吗


在脚本where is@its上创建一个数组来存储对每个照片持有者的引用。在onLoad函数中,在创建剪辑参考时存储它:

//create the imageList
var imageList:Array =[];

dados.onLoad = function():Void  {
    qtd = this.childNodes[0].childNodes.length;
    _root.qualqtd = this.childNodes[0].childNodes.length;

    for (j = 0; j @= qtd; j++) {
        mcPanels.item_mc.duplicateMovieClip("item_mc" + j,mcPanels.getNextHighestDepth());
        mcPanels["item_mc" + j].imagem = this.childNodes[0].childNodes[j].childNodes[0].attributes.imagem;
        mcPanels["item_mc" + j].tamanho = this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto;
        mcPanels["item_mc" + j].foto.loadMovie(mcPanels["item_mc" + j].imagem);

        mcPanels["item_mc" + j]._x = j * mcPanels["item_mc" + j].tamanho;
        mcPanels["item_mc" + j]._y = 0;
        //store a reference to the new foto holder
        imageList.push(mcPanels["item_mc" + j]);
    }
};
然后在moveIt()函数中,跟踪当前剪辑并使用其宽度设置targX值:


hth

非常好。。。我还有一个问题!!。。参见代码:mcPanels[“item_mc”+j]。_x=j*mcPanels[“item_mc”+j];这会将一张图片放在另一张图片的前面,但它们的宽度不同,因此不起作用。。如何正确处理?因为您有一个对片段的引用,所以可以得到每个元素的宽度-so var imageWidth:Number=imageList[I].foto.\u width;或var imageWidth:Number=imageList[i].tamanho.\u width-HTHLES go:我把这个var imageWidth:Number=mcPanels[“item_mc”+j].tamanho;我得到了所有图像的宽度。。。但我不明白的是,如何计算一个位置相对于另一个位置……好吧。。我明白这一点。。我想你不明白我的意思,看看这个链接:AR2大小的图像:绿色和深红色是100px宽,蓝色图像是50px宽,一个不是挨着放的,这样做的脚本是:mcPanels[“item\u mc”+j]。\u x=j*mcPanels[“item\u mc”+j];内部为循环。如何正确复制电影?一个挨着一个?这是我现在的问题。。ty为您提供帮助那么您是否希望找到下一个x位置,以便将图像彼此相邻地布局(在dados.onLoad中)?
//create the imageList
var imageList:Array =[];

dados.onLoad = function():Void  {
    qtd = this.childNodes[0].childNodes.length;
    _root.qualqtd = this.childNodes[0].childNodes.length;

    for (j = 0; j @= qtd; j++) {
        mcPanels.item_mc.duplicateMovieClip("item_mc" + j,mcPanels.getNextHighestDepth());
        mcPanels["item_mc" + j].imagem = this.childNodes[0].childNodes[j].childNodes[0].attributes.imagem;
        mcPanels["item_mc" + j].tamanho = this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto;
        mcPanels["item_mc" + j].foto.loadMovie(mcPanels["item_mc" + j].imagem);

        mcPanels["item_mc" + j]._x = j * mcPanels["item_mc" + j].tamanho;
        mcPanels["item_mc" + j]._y = 0;
        //store a reference to the new foto holder
        imageList.push(mcPanels["item_mc" + j]);
    }
};
function moveIt() 
{
    var imageWidth:Number  = imageList[i]._width;
    trace("i" +i + "< "+ imageWidth);
    if (dir == 1) 
    {
        targX = Math.floor(mcPanels._x - imageWidth);
        i++;

        if (i == clipNum) 
        {
            dir = -dir;
        }

    } else if (dir == -1) 
    {
        targX = Math.floor(mcPanels._x + imageWidth);
        i--;

        if (i == 0) 
        {
            dir = -dir;
        }
    }
...
}
dados.onLoad = function():Void  {
    qtd = this.childNodes[0].childNodes.length;
    _root.qualqtd = this.childNodes[0].childNodes.length;
    //track the width of the images
    var totalWidth:Number = 0;

    for (j = 0; j @= qtd; j++) {
        mcPanels.item_mc.duplicateMovieClip("item_mc" + j,mcPanels.getNextHighestDepth());
        mcPanels["item_mc" + j].imagem = this.childNodes[0].childNodes[j].childNodes[0].attributes.imagem;
        mcPanels["item_mc" + j].tamanho = this.childNodes[0].childNodes[j].childNodes[1].attributes.tamanhofoto;
        mcPanels["item_mc" + j].foto.loadMovie(mcPanels["item_mc" + j].imagem);
        //dynamically set the x position based on previous image width
        mcPanels["item_mc" + j]._x = totalWidth;
        mcPanels["item_mc" + j]._y = 0;
        //store a reference to the new foto holder
        imageList.push(mcPanels["item_mc" + j]);

        //i assume you have the width in your xml
        totalWidth += mcPanels["item_mc" + j].tamanho;
    }
};