アプリ版:「スタンプのみでお礼する」機能のリリースについて

XMLに記述されているサムネイル画像(複数)を帯状に横に等間隔に並べたいのです。

XMLは各ノードに画像名とサイズが属性として記述されており、
画像サイズは横幅は同じですが、高さがそれぞれ異なるので、単純に箱に入れるわけにはいかないようです。

そこで、
1.伸縮可能な箱を用意する。
2.XMLから、属性[高さ]を取得し、1の伸縮可能な箱に設定
3.2つめからは、箱のy座標を、足していく。
4.これを繰り返す。
5.指定の場所まで行ったら、改行する。

4までは以前の質問項目を参考にうまく行ったのですが、
5.「指定の場所まで行ったら、毎回改行する。」

というのが、うまくいきません。
誰かご指南いただけないでしょうか?

Flashはcs3です。

A 回答 (2件)

何か難しいことをしているように見えます。


シンプルに考えましょう。

//貼り付けたい写真の総数
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 = ???;//写真の高さ
}
//----------------------

//次の写真へ~
}
    • good
    • 0

箱の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;
}


いかがでしょう?

補足日時:2008/10/21 15:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!