3

最終編集: 解決済み!

さて、ここで完全な答えを見つけることができませんでしたが、最終的に私が求めていたものを手に入れました. あなたの助けと忍耐に感謝します。

補足として: int 型と Number 型の使用に問題があった可能性があると思います。ソリューションを詳しく調べたところ、int ではなく Number が使用されていることがわかりました。number には浮動小数点が含まれ、 int には含まれないことがわかります。これを自分で修正しようとするたびに、私の数値はおそらく丸められていました。私が知っている限りでは、TDIの答えは的を射ていた可能性があり、パディングにintを使用すると丸められた数値が蓄積された可能性があります..まあ、あなたは毎日何かを学びます..

私が探していた方法でムービー クリップをコンテナー ムービー クリップ (またはスプライトなど) に制限する正しいコードは次のとおりです。

var picContainer:PicContainer = new PicContainer();
picContainer.x = stage.stageWidth / 2 - picContainer.width / 2;
picContainer.y = stage.stageHeight / 2 - picContainer.height / 2;
addChild(picContainer);

var totalPics:int = 17;

var pic:Pic = new Pic(); //make an instance just to get its width

var xRange:Number = picContainer.width - pic.width;
var spacing:Number = xRange / (totalPics - 1);

//A little optimization: only need to calculate this number ONCE:
var yLoc:Number = picContainer.height / 2 - pic.height / 2;

for(var i:int = 0; i < totalPics; i++) {
    pic = new Pic();
    pic.x = i * spacing;
    pic.y = yLoc;
    picContainer.addChild(pic);
}

ロジックは非常に単純で、正確にこのロジックを示す図を描いたので、なぜ自分でそれを理解できなかったのかわかりません。しかし、私は正しい場所に数字を入れていなかったに違いありません。

ボーナスコンテンツ! 追加のボーナスとして(誰かがこのスレッドが答えを探しているのを見つけた場合..)、次のコードを使用して、中心点から「写真のファンアウト」を作成することもできます(ただし、左から右の順序になります):

var picContainer:PicContainer = new PicContainer();
picContainer.x = stage.stageWidth / 2 - picContainer.width / 2;
picContainer.y = stage.stageHeight / 2 - picContainer.height / 2;
addChild(picContainer);

var totalPics:int = 5;

var pic:Pic = new Pic(); //make an instance just to get its width

var padding:Number = (picContainer.width - (pic.width * totalPics))  / (totalPics + 1);

for(var i:int = 0; i < totalPics; i++) {
    pic = new Pic();
    pic.x = padding + i * (pic.width + padding);
    pic.y = picContainer.height / 2 - pic.height / 2;
    picContainer.addChild(pic);
}

試してみてください。これらは優れたサムネイル ドック エンジンになります。

最初の編集:まあ、TDI のおかげである程度の進歩はありますが、完全な解決策ではありません。

ご覧のとおり、ムービー クリップがコンテナに完全に収まらず、最後の 1 つまたは 2 つが突き出たままになるという問題が残ります。

example:

代替テキスト

私の修正されたコードは次のようになります。

var newPicContainer:picContainer = new picContainer();
var newPic:pic;

var picwidth:int = 100;
var amountofpics:int = 22;
var i:int;

//add a container
addChild(newPicContainer);

//center our container
newPicContainer.x = (stage.stageWidth/2)- (newPicContainer.width/2);
newPicContainer.y = (stage.stageHeight/2)- (newPicContainer.height/2);

var totalpicwidth:int = picwidth*amountofpics;

var totalpadding:int = newPicContainer.width - totalpicwidth;

var paddingbetween:int = (totalpadding / amountofpics);

for (i = 0; i < amountofpics; ++i)
{
    //make a new mc called newPic(and i's value)  eg. newPic1
    this['newPic' + i] = new pic();
    this['newPic' + i].width = picwidth;

    //add our pic to the container
    newPicContainer.addChild(this['newPic' + i]);

    //set the new pics X
    if (i != 0)
    {
        // if i is not 0, set newpic(i)s x to the previous pic plus the previous pics width and add our dynamic padding 
        this['newPic' + i].x = this['newPic' + (i-1)].x + picwidth + paddingbetween;
    }
    else
    {
        this['newPic' + i].x = 0;
    }
}

事前に誰にも感謝します!

元の投稿:

こんにちは、ここに初めて投稿します。私は何も間違っていないことを願っています。私の問題は次のとおりです。

「サムネイル」を作成し、それを含むムービークリップ内の前のサムネイルの隣に (少しパディングして) 配置する、非常に基本的な for ループがあります。

var newPicContainer:picContainer = new picContainer();
var newPic:pic;
var amount:int = 9;
var i:int;

//Add our container
addChild(newPicContainer);

//center our container
newPicContainer.x = (stage.stageWidth/2)- (newPicContainer.width/2);
newPicContainer.y = (stage.stageHeight/2)- (newPicContainer.height/2);


for (i = 0; i < amount; ++i)
{
 newPic = new pic();
 newPicContainer.addChild(newPic);

    //just so i know it's adding them..
    trace(newPic.thisOne);
 newPic.thisOne = i;

    // set this one to its self (+5 for padding..) Times, the amount already placed. 
 newPic.x = (newPic.width+5) *i;
}

コンテナの長さを把握し、その数値に関連して「サムネイル」を追加するために使用できる方程式または「魔法の数学」があるかどうか疑問に思っています。基本的に、サムネイルを互いに押しつぶして、すべてが中に収まるようにします..

次の行に沿ったもの:

newPic.x = (newPic.width *i) - stuff here to make it know not to go past the containing width;

私は数学があまり得意ではないことを認めなければならないので、コーディングのこの部分は私を逃れます..

事前にテイカーに感謝します..

4

3 に答える 3

2

width プロパティを明示的に呼び出すことで、コンテナーの長さを取得できます。

//Container Width    
newPicContainer.width;

または newContainer は、追加された写真の親でもあります。

//Container Width    
newPic.parent.width;

次に、写真が占める全長を取得する必要があります。

var arrayOfPics:array = [pic1, pic2, pic3, pic4, pic5];
var picsWidth:Number;

for each (var element:pic in arrayOfPics)
         picsWidth =+ element.width;

その後、コンテナーから合計の写真の長さを差し引いて、分離に使用できるパディングを知ることができます。

var totalPadding:Number = newPicContainer.width - picsWidth;

これで、totalPadding を写真の数で割ることによって、写真とコンテナーの両側との間に許容できるパディングの量を決定し、最後に余分なパディングを追加することができます。

var padding:Number = totalPadding / arrayOfPics.length + 1;

パディングを含めるだけで写真を追加できるようになりました

for (var i:int = 0; i < arrayOfPics.length; i++)
    {
    newPicContainer.addChild(arrayOfPics[i]);
    (i == 0) ? arrayOfPics[i].x = padding : arrayOfPics[i].x = arrayOfPics[i - 1].x + arrayOfPics[i - 1].width + padding;
    }
于 2010-10-17T00:13:26.623 に答える
1

これを試して...

 //maximum available length
 var maxLength:int; 

 // a single thumbnail width
 var picWidth:int = 100;

 // total number of pics in a container
 var maxNumPics:int;

 // as long as the maximum available length
 // is inferior to the container length 
 // add a new thumbnail
 while( maxLength < newPicContainer.length - 100 )
 { 
    maxLength += 100;
    maxNumPics += 1;
 } 

 // calculate the amount of available padding.
 var padding:Number =  ( newPicContainer.length - maxLength )/ maxNumPics; 

 //add your thumbs
 var picX:int;

 for( var i:int ; i < maxNumPics ; ++i )
 {
     var newPic:Pic = new Pic();
     newPic.x = picX;

     picX += padding + picWidth;
     newPicContainer.addChild( newPic ); 
 }
于 2010-10-17T04:19:08.500 に答える
0

Flex フレームワーク (Flash フレームワーク) の使用を検討することをお勧めします。これにより、この種のビューの構築がはるかに簡単になります。

コンテナーのレイアウト プロパティを設定して、項目を水平、垂直、またはタイル レイアウトで配置し、項目をコンテナーに追加することができます。

フレックスの詳細については、こちらをご覧ください

Flex Layoutについての情報

于 2010-10-16T23:20:10.320 に答える