Форум 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=102017)

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); - то, что нужно. Спасибо всем.


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

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