- ベストアンサー
幅の異なる複数のムービークリップを等間隔で配置するには
複数のムービークリップをattachMovieで配置することはできたのですが、これらを左右に等間隔で並べるにはどうしたらいいでしょうか?同じ幅であればなんとかできそうなんですが、ムービークリップの幅がひとつひとつ異なる場合の処理で悩んでいます。 for (i = 1; i < 10; i++) { this.attachMovie ("A" + i,"A" + i,i,{_x:15, _y:15}); } ここまではできました。 これらを下記のようにすれば並べられるんですが、もっとスマートにするにはどうしたら良いでしょうか? A2._x = A1._width + 30; A3._x = A1._width + A2._width + 45; A4._x = A1._width + A2._width + A3._width + 60; A5._x = A1._width + A2._width + A3._width + A4._width + 75; よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- DPE
- ベストアンサー率85% (666/776)
1つ挿入するごとに変数にムービークリップを配置する位置を記録していき、この変数の値を見ながら配置してはいかがでしょう。 次のように考えます。 挿入するムービークリップの基準点が、全て”左端”にあるものとします。 変数を1つ用意し、初期値として、最初に挿入するムービークリップの位置を入れておきます。 ムービークリップの位置を決める際には、_x プロパティにこの変数の値を設定します。 1つ挿入するごとに、この変数に、今挿入したムービークリップの幅( _width プロパティの値)と余白の大きさを加えたものを加算します。これは今挿入したムービークリップの右端から余白の分を空けた位置であり、つまりこれが、次のムービークリップの左端の座標になります。 スクリプトの一例です。 リンケージ識別子 A1 ~ A10 と付けた、それぞれ幅の異なるムービークリップ(基準点は全て左端)があるとします。 このスクリプトはタイムラインに記述してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) /*************************************************/ //余白の大きさ margin_x = 15; //配置位置のX座標を保持 //ムービークリップを配置するごとに、幅+余白分だけ増えていく put_x = 15; //ムービークリップを等間隔に配置する for( i = 1 ; i <= 10 ; i++ ) { //ムービークリップを挿入する obj = this.attachMovie( "A" + i , "A" + i , i ); //位置を決める obj._x = put_x; obj._y = 15; //次のムービークリップのために配置位置を更新する put_x += obj._width + margin_x; } /*************************************************/ 変数 put_x に、ムービークリップを配置する位置が入ります。 最初だけは、全体の左端の位置を初期値として設定しておきます。 ムービークリップを挿入→位置を決める→ put_x の値を更新、という作業を、for ループを使ってムービークリップの数だけ繰り返します。 ムービークリップの位置、特にXの座標を決める時は、変数 put_x の値を使います。 今挿入したムービークリップの位置を決めたら、次のムービークリップのために、put_x の値をムービークリップの幅+余白の分だけずらしておきます。 この作業を繰り返していくことで、ムービークリップの幅に関係なく等間隔に並べることができます。 計算で規則正しく配置する場合は、基準点の位置が大切です。基準点がムービークリップごとに違っていると、ズレたり重なったりすることがあります。 左端であれば、単純に幅+余白で次のムービークリップの配置位置が算出できますから、特に理由がなければ左端がオススメです。
お礼
DPE様 回答ありがとうございました。DPEさんの方法でも、見事に希望通り動作しました。詳しい解説まで付けていただき、本当にありがとうございます。しっかり勉強させていただきます。
お礼
atse様 回答ありがとうございます。見事に希望通りのことができました。教えていただいたスクリプトを、じっくり勉強させていただきます。ありがとうございました。