Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   научите дурака правильно составлять сетку из клипов через циклы (http://www.flasher.ru/forum/showthread.php?t=142271)

in4core 16.07.2010 18:14

научите дурака правильно составлять сетку из клипов через циклы
 
)))
Код AS1/AS2:

var FFF = 0
for (var i = 0; i < 5; i++) {
                for (var j = 0; j < F_ID_ARR.length / 5; j++) {
 
                                var mc = frt.CON.attachMovie("cont_fr", "cont_fr" + FFF, frt.CON.getNextHighestDepth());
                                mc._x = i * (frt.CON.cont_fr0._width + 20);
                                mc._y = j * (frt.CON.cont_fr0._height + 20);
                                FFF++;
 
 
 
                }
        }

Естественно такая запись некорректна . хотя работает , но опять не так как надо.

Вообщем сделать нужно следующее :

чтобы пустые места всегда отсавались на посл строке. А сейчас, пустые места остаются по вертикали соотв, тоесть если длинна 95 то заполнено все, если 96, то пустые дырки в 5 столбце и соотв а посл 4х строках. А Нужно рассматривать только посл строку. Спасибо заранее

rainbowrussia 16.07.2010 18:34

Попробуйте поменять _x и _y местами, то есть переменная i должна изменять _y координату, а у вас сейчас она изменяет _x координату.

in4core 16.07.2010 18:35

пробовали стало совсем неправильно выводит ваще тока пол массива

rainbowrussia 16.07.2010 18:38

Вы хотите зафиксировать (5) количество строк или столбцов?

udaaff 16.07.2010 18:40

Код AS1/AS2:

var tileListLength:Number = 123;
var tileWidth:Number = 33;
var tileHeight:Number = 12;
var jLength:Number = 10;
var iLength:Number = Math.ceil(tileListLength / jLength);
var c:Number = 0;
 
for (var i:Number = 0; i < iLength; i++)
{
        var mcY:Number = tileHeight * i;
 
        for (var j:Number = 0; j < jLength; j++)
        {
                var mc:MovieClip = attachMovie("id", "mc" + c, c);
                mc._x = tileWidth * j;
                mc._y = mcY;
 
                if (++c == tileListLength)
                        break;
        }
}


in4core 16.07.2010 18:42

udaff щас проверим. Раинбов - 5 столбцам

etc 16.07.2010 18:47

Достаточно одного цикла.

in4core 16.07.2010 18:48

удав спасибо большое. Ты математик )))

udaaff 16.07.2010 18:48

Двумя удобнее.

in4core 16.07.2010 18:48

etc как ?

Добавлено через 55 секунд
Да кстати удав, объясни мне пожалуйста мою ошибку. Просто сразу в глаза не бросается, чем отличается твой от моего. Но работает верно)))))))))))

rainbowrussia 16.07.2010 18:51

Код AS1/AS2:

 
var bwidth = 50; // ширина блока
var bheight = 50; // высота блока
var alen = 26; // длинна массива, заменить на имя_массива.length
var cols = 5; // фиксируем число колонок
var rows = alen/cols; // вычисляем число строк
if (rows != Math.floor(rows)) { rows++; }
rows = Math.floor(rows);
 
for (j=0; j<rows; j++) { // цикл по строкам
        for (i=0; i<cols; i++) { // цикл по колонкам
                var aridx = j*cols + i; // вычисляем номер элемента массива
                if (aridx < alen) { // если элемент укладывается в массив - изображаем его
                        var xcoord = i * bwidth; // в таких-то координатах
                        var ycoord = j * bheight;
                        trace(aridx + ':' + xcoord + ':' + ycoord);
                }
        }
}


etc 16.07.2010 18:52

Цитата:

Сообщение от in4core (Сообщение 922866)
etc как ?

Один цикл, два инкремента, один сбрасывается по достижению конца строки.

in4core 16.07.2010 18:52

Блин, а теперь почему то отступов нету между клипами!


Код AS1/AS2:

mc._x = tileWidth * j+20 ;
                mc._y = mcY+20;

И все равно они слипаются.!!!

rainbowrussia 16.07.2010 18:54

Вариант с одним циклом
Код AS1/AS2:

var bwidth = 50; // ширина блока
var bheight = 50; // высота блока
var alen = 26; // длинна массива, заменить на имя_массива.length
var cols = 5; // фиксируем число колонок
 
for (idx=0; idx<alen; idx++) {
        var row = Math.floor(idx/cols);
        var xcoord = (idx - row*cols) * bwidth;
        var ycoord = row * bheight;
        trace(idx + ':' + xcoord + ':' + ycoord);
}


udaaff 16.07.2010 18:57

Цитата:

И все равно они слипаются.!!!
К ширине и высоте 20 нужно прибавлять.

in4core 16.07.2010 18:58

спасибо

Добавлено через 47 секунд
ребятушки всем спасибо! оч полезная инфа


Часовой пояс GMT +4, время: 23:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.