- 締切済み
flash、外部xml、サムネイル画像の改行について。
XMLに記述されているサムネイル画像(複数)を帯状に横に等間隔に並べたいのです。 XMLは各ノードに画像名とサイズが属性として記述されており、 画像サイズは横幅は同じですが、高さがそれぞれ異なるので、単純に箱に入れるわけにはいかないようです。 そこで、 1.伸縮可能な箱を用意する。 2.XMLから、属性[高さ]を取得し、1の伸縮可能な箱に設定 3.2つめからは、箱のy座標を、足していく。 4.これを繰り返す。 5.指定の場所まで行ったら、改行する。 4までは以前の質問項目を参考にうまく行ったのですが、 5.「指定の場所まで行ったら、毎回改行する。」 というのが、うまくいきません。 誰かご指南いただけないでしょうか? Flashはcs3です。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- maaaaaasa
- ベストアンサー率33% (6/18)
何か難しいことをしているように見えます。 シンプルに考えましょう。 //貼り付けたい写真の総数 picNum = ???;//xmlから取り出す //初期座標(最初の左上の座標) X_INIT = ???;//好きな位置に決める Y_INIT = ???;//好きな位置に決める //写真をおける領域の幅と高さ SCREEN_WIDTH = ???;//好きに決める //写真と写真の横の間隔 sh = 30; //現在の座標 px = X_INIT; py = Y_INIT; for(i = 0 ; i < picNum ; i++){ // 空のムービークリップ p_mc0~ノード数 を作成 pic = _root.createEmptyMovieClip("p_mc"+i,i); //picに写真を突っ込む //写真の位置を決める pic._x = px; pic._y = py; //写真の幅 picWidth = ???;//xmlから取り出す //----現在位置の更新処理 //現在のx座標に、今取り出した画像の幅と間隔分足す x += picWidth + sh; //表示領域の幅を上回っていたら一段下ろす if(x > X_INIT + SCREEN_WIDTH){ x = X_INIT;//x座標は初期位置 y = ???;//写真の高さ } //---------------------- //次の写真へ~ }
- maaaaaasa
- ベストアンサー率33% (6/18)
箱のheightを加算して、指定したyを超えたら改行する。 左上から右下に向かって縦に並べていく感じでしょうか。 現在列のy座標 = 最新の画像のy座標 + 最新の画像のheight if(現在列のy座標 > 指定した座標y){ 現在列のy座標 = 0; 列番号++; } それぞれの画像のx座標は 列番号 * (画像幅 + 列間幅)
補足
早速の回答、ありがとうございます! すみません、少し質問を間違えていました。 「箱のwidthを加算して、指定したx座標を超えたら改行する」でした。 さっそく、参考にしながら進めているのですが、 一度だけ改行され、次に指定の座標までいっても改行されません。 参考までに現在進めているスクリプトをのせておきますので、ご参考にして下さい。 px = 100; py = 100; // 写真と写真の間の隙間 sh のサイズを設定 sh = 30; // i=0→ノード数未満 で i に 1 を加算しながらループ for (i=1; i<n_len; i++) { if (i == 1) { // i が 0 のとき写真の高さを 0 とする ph = 0; } else { // i が 1以上 で 写真の高さに h属性数 を加算 ph += Number(this.firstChild.childNodes[i-0].attributes.h); } // nm 属性の取得 pnm = this.firstChild.childNodes[i].attributes.nm; // 空のムービークリップ p_mc0~ノード数 を作成 _root.createEmptyMovieClip("p_mc"+i,i); // p_mc0~ノード数 の x 座標を指定 _root["p_mc"+i]._x = px+sh*i+ph; // p_mc0~ノード数 の y 座標を指定 _root["p_mc"+i]._y = py; if(_root["p_mc"+i]._x > 1000) { _root["p_mc"+i]._x = -960+(px+sh*i+ph); _root["p_mc"+i]._y += py+sh; } いかがでしょう?