Вход

Просмотр полной версии : обратный порядок


Keenan
07.10.2007, 18:06
Ситуация: на сцене друг за другом вертикально выстраиваются объекты при помощи цикла, все очень просто: y-координата каждого следующего объекта this["q"+i]._y получается путем сложения y-координаты предыдущего объекта this["q"+(i-1)]._y и высоты предыдущего объекта this["q"+(i-1)]._height ...

this["q"+i]._y=this["q"+(i-1)]._y+this["q"+(i-1)]._height

... и получается что-то типа:
[ q0 ]
[ q1 ]
[ q2 ]
[ ... ]

Вопрос: подскажите, пожалуйста, как сделать такой же обратный порядок построения:
[ ... ]
[ q2 ]
[ q1 ]
[ q0 ]

По идее, y-координата предыдущего должна рассчитываться как разница y-координаты следующего и высоты предыдущего...

this["q"+(i-1)]._y=this["q"+i]._y-this["q"+(i-1)]._height

...но это не срабатывает. Мб я туплю, подскажите, пожалуйста, где не так?

udaaff
07.10.2007, 18:19
Покажите полностью код, вместе с циклом, а лучше исходник.

Keenan
07.10.2007, 18:30
исходник слишком громоздкий, вот код этого цикла

for(i=0;i<docs.firstChild.childNodes.length;i++){
attachMovie("mc_attach","q"+i,i)
this["q"+i]._x=0
//this["q"+(i-1)]._y=this["q"+i]._y-this["q"+(i-1)]._height //обратный порядок, работает неверно
this["q"+i]._y=this["q"+(i-1)]._y+this["q"+(i-1)]._height //прямой порядок
}

изменение условий цикла на обратные мне не подходит.

etc
07.10.2007, 18:31
Вот скажите мне, зачем вы сотню раз копируете «this["q"+(i-1)]»?
Читается проще? Быстрее работает?
Зачем вы ломаете глаза себе и заставляете компилятор сотню раз считать (i-1), конвертировать в строку и мучаться в поисках объекта qX?

Keenan
07.10.2007, 18:38
ну так как же мне поступить?

моя ошибка здесь?
attachMovie("mc_attach","q"+i,i)

udaaff
07.10.2007, 18:44
Не тестировал.
// сверху вниз
var y0 = 0;
for (var i = 0; i<docs.firstChild.childNodes.length; i++) {
var my_mc = attachMovie("mc_attach", "q"+i, i);
my_mc._y = y0;
y0 += my_mc._height;
}
// снизу вверх
var y0 = Stage.height;
for (var i = 0; i<docs.firstChild.childNodes.length; i++) {
var my_mc = attachMovie("mc_attach", "q"+i, i);
my_mc._y = y0-my_mc._height;
y0 -= my_mc._height;
}

Keenan
07.10.2007, 19:05
благодарю. попробовал, не получилось, к сожалению. а обязательно вводить переменную y0 и my_mc? я поменял в Вашем коде my_mc на свою конструкцию this["q"+i] и работать стало, но неверно все же, все мувики приклеились к y0, а порядок не поменялся.

Mnilionic
07.10.2007, 19:10
var y0 = 0;
for (var i = docs.firstChild.childNodes.length-1; i>=0; i--) {
var my_mc = attachMovie("mc_attach", "q"+i, i);
my_mc._y = y0;
y0 += my_mc._height;
}

поздно прочёл о неизменном условии цикла, сории

var y0 = 0;
for (var i = 0; i<docs.firstChild.childNodes.length; i++) {
var j = docs.firstChild.childNodes.length - (i+1);
var my_mc = attachMovie("mc_attach", "q"+j, j);
my_mc._y = y0;
y0 += my_mc._height;
}

udaaff
07.10.2007, 19:17
Все должно работать. Потестируйте в кадре.
// сверху вниз
var y0 = 0;
for (var i = 0; i<5; i++) {
var my_mc = createEmptyMovieClip("my_mc"+i, i);
var my_txt = my_mc.createTextField("my_txt", my_mc.getNextHighestDepth(), 0, 0, 100, 30);
my_txt.text = i+" "+my_mc;
my_mc._y = y0;
y0 += my_mc._height;
}
// снизу вверх
var y0 = Stage.height;
for (var i = 0; i<5; i++) {
var my_mc = createEmptyMovieClip("my_mc"+i, i);
var my_txt = my_mc.createTextField("my_txt", my_mc.getNextHighestDepth(), 0, 0, 100, 30);
my_txt.text = i+" "+my_mc;
my_mc._y = y0-my_mc._height;
y0 -= my_mc._height;
}
Насчет "а обязательно вводить переменную y0 и my_mc", читайте четвертый пост.

Keenan
07.10.2007, 19:45
Mnilionic, var j = docs.firstChild.childNodes.length - (i+1); - то, что нужно. Спасибо всем.