AS3:从自己的中心扩展多个元素

时间:2014-07-04 17:08:22

标签: actionscript-3 flash tween

这是我为使其工作而编写的代码,但它从一个点扩展它们,就好像它们都在一个大容器内,而不是每个容器在它自己的容器中#34; middleContainer"。我该如何解决这个问题?

谢谢!! :)

var thumbsContainer:MovieClip;
var thumb_Loader: Loader;
var thumb: Loader; 
var middleContainer: MovieClip;

function createThumbs(): void {
    thumbsContainer = new MovieClip();
    stage.addChild(thumbsContainer);
    for (var i: uint = 0; i < 5 ; i++) {
        thumb_URL = VideoList[i].@THUMB_URL;
        thumb_Loader = new Loader();
        thumb_Loader.load(new URLRequest(Thumb_URL));
        thumb_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, viewThumbs)
        thumb_Loader.x = i * (thumbWidth + thumbSpacing);
    }
}

function viewThumbs(e: Event): void {
    thumb = e.target.loader;
    middleContainer = new MovieClip();
    middleContainer.addChild(thumb);
    thumbsContainer.addChild(middleContainer);

    thumb.x -= thumbWidth/2;
    thumb.y -= thumbHieght/2;
    middleContainer.x += thumbWidth/2;
    middleContainer.y += thumbHieght/2;

    var scaleUp:Tween = new Tween (middleContainer, "scaleX", Strong.easeOut, 0, 1, 1, true)
}
// Scales All Thumbs from One point not individually :((

2 个答案:

答案 0 :(得分:1)

我认为这是因为middleContainer的所有实例都位于同一位置 - 即。以舞台的起源为中心。我认为您需要横向放置这些实例(正如您当前正在为loader实例执行的操作),然后在容器内偏移缩略图。

未经测试,但类似于以下内容:

var thumbsContainer:MovieClip;
var thumb_Loader: Loader;
var thumb: Loader; 
var middleContainer: MovieClip;
var loadCount:int = 0; // use a load count to preserve index

function createThumbs(): void {
    thumbsContainer = new MovieClip();
    stage.addChild(thumbsContainer);
    for (var i: uint = 0; i < 5 ; i++) {
        thumb_URL = VideoList[i].@THUMB_URL;
        thumb_Loader = new Loader();
        thumb_Loader.load(new URLRequest(Thumb_URL));
        thumb_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, viewThumbs);

        // Need to do this to the middleContainer instances instead
        //thumb_Loader.x = i * (thumbWidth + thumbSpacing);
    }
}

function viewThumbs(e: Event): void {

    thumb = e.target.loader;
    thumb.x -= thumbWidth / 2;
    thumb.y -= thumbHeight / 2;

    middleContainer = new MovieClip();
    middleContainer.x = loadCount * (thumbWidth + thumbSpacing); // lay the container's out horizontally
    middleContainer.addChild(thumb);

    thumbsContainer.addChild(middleContainer);

    // This is just reversing the offset you're usng to centre the thumb
    //middleContainer.x += thumbWidth/2;
    //middleContainer.y += thumbHieght/2;

    loadCount ++;

    var scaleUp:Tween = new Tween (middleContainer, "scaleX", Strong.easeOut, 0, 1, 1, true)
}

答案 1 :(得分:1)

您的问题可能与这两行有关:

thumb.x -= thumbWidth/2;
thumb.y -= thumbHieght/2; //you spelled height wrong in this variable name

虽然你没有表现出来,但我猜测thumbWidth&amp;对于您经历的每个缩略图,thumbHeight都会递增。拇指的位置不应考虑拇指宽度/高度以外的任何内容,任何实际定位都应仅在父容器(middleContainer)上完成。将其更改为以下内容仅偏移缩略图的实际宽度:

thumb.x = thumb.width * -0.5;
thumb.y = thumb.height* -0.5;

因此,如果你的目标是将缩略图放在行中,你可以执行以下操作(为了清晰起见,我将thumbWidth和thumbHeight重命名为rowX和rowY:

var rowHeight:Number = 0;
var rowX:Number = 0;
var rowY:Number = 0;

function viewThumbs(e: Event): void { 

    thumb = e.target.loader;
    middleContainer = new MovieClip();
    middleContainer.addChild(thumb);
    thumbsContainer.addChild(middleContainer);

    thumb.x = thumb.width * -0.5;
    thumb.y = thumb.height* -0.5;

    if(rowX + thumb.width > stage.stageWidth){ //stage.stageWidth being whatever you want the maximum row width to be
        //create a new row
        rowX = 0;
        rowY += rowHeight + 10; //10 being padding
        rowHeight = 0; //reset row height;
    }

    middleContainer.x = rowX;
    middleContainer.y = rowY;

    rowHeight = Math.max(rowHeight, thumb.height); //store the thumb with the biggest height in this row

    rowX += thumb.width + 10; //10 being some padding - increments the x position 

    var scaleUp:Tween = new Tween (middleContainer, "scaleX", Strong.easeOut, 0, 1, 1, true)

}