PDA

Просмотр полной версии : Расставить програмно клипы


Skudarnov
06.03.2006, 17:01
Вот кусок кода, я что-ть совсем DUMB видимо.... не получается расставить в двух циклах... Мне нужно чтобы они копировались и становились в 3 ряда по 4 штуки...

for (d=0; d<=len-1; d+=8){
film_mc = filmm.duplicateMovieClip("filmm"+d, d+10);
film_mc._x=???
film_mc._y=???

Помогите плиз... я делал вложенные циклы но тогда все клипы одной кучей в последней ячейке какбы... т.е. внизу справа тусуются.
Помогите плизз, кому не тяжело.

nouba
06.03.2006, 17:14
var w:Number = film_mc._width;
var h:Number = film_mc._height;
var xx:Number = film_mc._x;
var yy:Number = film_mc._y;
for (a=0; a<3; a++) {
for (b=0; b<4; b++) {
film_mc.duplicateMovieClip("film_mc"+a+b, this.getNextHighestDepth(), {_x:xx+w*b, _y:yy+h*a});
}
}


Может не очень коротко написал (можно и по красивше написать) зато быстродействие стопудово максимальное :)
И разобратся тебе будет легче

Erya
06.03.2006, 17:21
Может поможет это.. с коментами хотябы, в отличии от поста выше :)

var itemSpacing:Number = 40; // Промежуток между элементами в строке.
var rowSpacing:Number = 40; // Промежуток между строками.

for (var i:Number = 0; i < 3; i++) { // Цикл для строк
for(var j:Number = 0; j < 4; j++) { // Цикл для элементов строки.
movie._x = itemSpacing * j; // х будет равен промежуток умножить на номер элемента (желательно ещё исходить из ширины мувика)
movie._y = rowSpacing * i; // у - номер строки умноэить на промежутое (тоже желательно исходить из высоты элемента)
}
}

nouba
06.03.2006, 17:24
Коменты впадло ставить :)
Да и код впринципе елементарный

Erya
06.03.2006, 17:29
Если человек этого не может написать, то он либо особо одарённый, либо он учится, и в том и в другом случае с каментами разобраться будет намного проще :) был у меня опыт "обучения" особо одарённых, практика показывает, что с каментами всё гораздо понятней и вопросов меньше.

nouba
06.03.2006, 17:29
Слушай... а ты код проверял :) ?
Человеку кажется мне совсем не то надо :)
Тоесть я так и не понял что твой листинг делает ?

Skudarnov
06.03.2006, 17:32
2 примера выше не помогли....
Дело в том, что все то что я дал происходит еще в одном цикле... в котором я выбираю все переменные пришедшие их ПХП фала...
Может с этим трабла.... короче даю кусок побольше...

num_of_rows=Fromphp_arr[2]; //count of rows in DB sent from PHP
Fromphp_arr.shift(); //удаляем первые 3 элемента массива
Fromphp_arr.shift();
Fromphp_arr.shift();
len=Fromphp_arr.length;
for (d=0; d<=len-1; d+=8){
film_mc = filmm.duplicateMovieClip("filmm"+d, d+10);
film_mc._x=d*10;
film_mc._y=d*10;
film_mc.down_link = Fromphp_arr[d];
film_mc.actor = Fromphp_arr[d+1];
film_mc.full_opis= Fromphp_arr[d+2];
film_mc.tn_pict = Fromphp_arr[d+3];
film_mc.type_vid = Fromphp_arr[d+4];
film_mc.opis_smal = Fromphp_arr[d+5];
film_mc.pic_big = Fromphp_arr[d+6];
film_mc.name_vid = Fromphp_arr[d+7];
film_mc.tn_picture="http://192.168.158.15/video/"+(Fromphp_arr[d+3]);
}

Тут для теста мувики расставляются просто по диагонали, чтобы все видно было...

Erya
06.03.2006, 17:34
Слушай... а ты код проверял :) ?
Человеку кажется мне совсем не то надо :)
Тоесть я так и не понял что твой листинг делает ?
Нет не проверял, дело не в том, что он делает, а в том как. Посмотри внимательней, это почти тоже самое, что описано у тебя, за исключением того, что нет duplicateMovie. Если я правильно понял автор не мог написать цикл, а не duplicateMovie.
З.Ы. хватит флудить :)

nouba
06.03.2006, 17:37
суть проблемы не ясна ваше :)
чего ты хочешь добится и как оно должно выглядить нифига не понял

Skudarnov
06.03.2006, 17:43
Короче, скрин вложил... размеры мувиков 100х150

Erya
06.03.2006, 17:52
Ответ был дан выше, для визуального представления советую взять бумажку и ручку, потом нарисовать свои элементы, и подумать, как они должны воводиться, после чего применить код описанный выше к соему, что бы получилось что-то вроде:
for (var d:Number = 0; d < 3; d++) { // Цикл для строк (всего 3 строки)
for(var j:Number = 0; j < 4; j++) { // Цикл для элементов строки. (в каждой строке по 4 элемента)
film_mc = filmm.duplicateMovieClip("filmm" + (d * j), (d * j) + 10);
film_mc._x = j * film_mc._width;
film_mc._y = i * film_mc._width;
film_mc.down_link = Fromphp_arr[(d * j) * j];
film_mc.actor = Fromphp_arr[(d * j) + 1];
film_mc.full_opis= Fromphp_arr[(d * j) + 2];
film_mc.tn_pict = Fromphp_arr[(d * j) + 3];
film_mc.type_vid = Fromphp_arr[(d * j) + 4];
film_mc.opis_smal = Fromphp_arr[(d * j) + 5];
film_mc.pic_big = Fromphp_arr[(d * j) + 6];
film_mc.name_vid = Fromphp_arr[(d * j) + 7];
film_mc.tn_picture="http://192.168.158.15/video/"+(Fromphp_arr[(d * j) + 3]);
}
}

З.Ы. может не работать, не проверял, но идея должны быть понятна.

Futs
06.03.2006, 18:05
Я тоже ничего не понял, вот тебе код в 3 ряда:for (i=0; i<20; i++) {
this.my_mc.duplicateMovieClip("my_mc"+i, i);
name = _root["my_mc"+i];
name._x = растояние начала+(i%3)*(name._width+растояние между клипами);
name._y = растояние начала+(Math.floor(i/3)*(name._height+растояние между клипами);
}

Skudarnov
06.03.2006, 18:13
film_mc.down_link = Fromphp_arr[(d * j) * j];
film_mc.actor = Fromphp_arr[(d * j) + 1];
film_mc.full_opis= Fromphp_arr[(d * j) + 2];
film_mc.tn_pict = Fromphp_arr[(d * j) + 3];
film_mc.type_vid = Fromphp_arr[(d * j) + 4];
film_mc.opis_smal = Fromphp_arr[(d * j) + 5];
film_mc.pic_big = Fromphp_arr[(d * j) + 6];
film_mc.name_vid = Fromphp_arr[(d * j) + 7];
film_mc.tn_picture="http://192.168.158.15/video/"

Не трогайте этот кусок.... Это выборка переменных с именем фильма, линком, картинкой и.т.д. из массива переменных "пришедших" их РНР

Skudarnov
06.03.2006, 18:17
Вот так надо, если кто не понял....

Futs
06.03.2006, 18:22
Тебе проще использовать мой код, сначала, дублируешь контейнеры, раставляешь их как надо, только вместо name._width и name._height, ставишь реальные числа, и добавляешь там же name.down_link = Fromphp_arr[i] и будет все работать.

Skudarnov
06.03.2006, 18:35
Дублируешь, т.е. расставлять по сцене ручками??
Просто хотелось делать все максимально гибко....
Я уверен что можно двумя циклами это сделать.... я делал на пустом мувике, но тут ничего не получается....

Futs
06.03.2006, 18:40
Как же это ручками? Я же тебе код написал.

Futs
06.03.2006, 18:42
Можно все в одном цикле.

Skudarnov
06.03.2006, 18:49
Ок... буду пробовать