Форум 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)
-   -   Уровни в as2 (http://www.flasher.ru/forum/showthread.php?t=135887)

gegemon81 04.02.2010 13:15

Уровни в as2
 
Такой вопрос у меня есть два объекта они крутятся по оси создавая эфект перспективы. И в отдалении уменьшаются. Как сделать так что бы тот что уменьшился сместился на слой вниз(опустился на уровень ниже) а потом при прохождении ...._Y=200; наоборот поднялся на уровень вверх?
Прошу вопрос очень важный нужен если исходник я выложу.

Psycho Tiger 04.02.2010 13:30

swapDepths

mooncar 04.02.2010 13:33

Слоев, которые используются при разработке, в самих роликах уже нет, а вот глубины (Z-индекс) - есть.
Для их смены используется метод swapDepths.
Если нужно поменять мувики глубинами между собой:
Код AS1/AS2:

mc1.swapDepths (mc2);

Можно задать нужную глубину руками:
Код AS1/AS2:

mc1.swapDepths (10);

Только при всех этих операциях надо иметь ввиду, что мувики, созданные в авторской среде, имеют отрицательные глубины, а те, которые создаются программно - от 0 и выше.
Так задумано, чтобы не было конфликтов.

gegemon81 04.02.2010 17:46

Не работает. Прикладываю исходник.
Подскажите где ошибка?

gegemon81 04.02.2010 17:49

Вложений: 1
Исходник

mooncar 04.02.2010 18:40

Нужно сменить глубины и ждать до следующего нужного момента, а у вас непрерывно идет swapDepths.
В общем, в логике ваших передвижений я не стал разбираться, но решение есть:
берем за основу постулат о том, что объект, который больше в вашем проекте, должен заслонять более маленький, т.е. удаленный в перспективе.
Поэтому признаком смены глубин будет момент, когда _xscale, одного будет больше, чем _xscale другого.
Кроме того, нужно ввести триггер того, что смена произошла, чтобы не теребить непрерывно swapDepths.
И еще заранее определим свободные уровни. У вас ведь изначальный аттач происходит на уровни 1 и 2, они заняты, поэтому, во избежание, используем getNextHighestDepth();
Таким образом, получаем код:

Код AS1/AS2:

var backLevel:Number = this.getNextHighestDepth();
var frontLevel:Number =  backLevel + 1;
wasSwaped_1 = false ;// признаки смены глубин
wasSwaped_2 = false ;// признаки смены глубин
 
_root.onEnterFrame = function() {
 
        if (mw._xscale >  mw2._xscale && !wasSwaped_1) {
                mw.swapDepths(frontLevel); //выходит вперед
                mw2.swapDepths(backLevel);//уходит назад
                wasSwaped_1 = true ;
                wasSwaped_2 = false ;
 
        }
 
        if (mw._xscale <  mw2._xscale && !wasSwaped_2) {
                mw.swapDepths(frontLevel);
                mw2.swapDepths(backLevel);
                wasSwaped_2 = true ;
                wasSwaped_1 = false ;                       
        }
 
//.... тут ваша анимация и изменение масштабирования мувиков
 
}

Код избыточен, можно попробовать сделать и одной проверкой, но сейчас не соображу.


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

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