Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   depth - и с чем его едят (http://www.flasher.ru/forum/showthread.php?t=34268)

blackhund 10.07.2002 20:53

depth - и с чем его едят
 
народ, если не сильно облом, объясните пожалуйста что это такое. не то чтобы совсем с нуля а в таком аспекте: я делаю вот что, каждый раз, когда жмут кнопку мыши, создаю дупликат экземпляра клипа, даю ему имя и присваиваю глубину. делаю я это столько раз, сколько нажмут кнопку мыши. и я следующему клипу давал глубину на 1 большую чем предидущему. у меня есть такое подозрение, что глубина эквивалентна номеру слоя, я прав? вопрос состоит в том, можно ли все эти клипы лепить на одной глубине или нет?
и еще одно. я создаю много клипов и хочу чтобы они были под определнным слоем, чтобы нарисованные на этом слое объекты "заслоняли" от зрителя эти клипы, мне что, нужно просто посчитать номер слоя, который находится под данным и присвоить соответствующую глубину клипу? или как?

Egoritch 10.07.2002 22:52

Re: depth - и с чем его едят
 
Цитата:

Оригинал написал(а) blackhund
народ, если не сильно облом

/* skipped */

. и я следующему клипу давал глубину на 1 большую чем предидущему. у меня есть такое подозрение, что глубина эквивалентна номеру слоя, я прав?

нет, не прав. Глубина задается для каждой сцены. Не важно, в каком слое лежит объект, если они все будут на одной сцене (не точно сказал - "сценой" называют немного другое, а я имею ввиду уровень типа), то не имеет значения, в каком они слое, главное - та глубина, которую ты задал при аттаче и дублицировании , swapDepths'e.

Цитата:


вопрос состоит в том, можно ли все эти клипы лепить на одной глубине или нет?

никак нельзя. Глубина у каждого объекта уникальная. Приаттачив мовик на ту глубину, где уже лежал объект, ты удалишь его (старый объект).

Цитата:

и еще одно. я создаю много клипов и хочу чтобы они были под определнным слоем, чтобы нарисованные на этом слое объекты "заслоняли" от зрителя эти клипы, мне что, нужно просто посчитать номер слоя, который находится под данным и присвоить соответствующую глубину клипу? или как?
или как. тебе нужно создать мувик В КОТОРОМ ТЫ БУДЕШЬ как хочешь менять глубину других мувиков. Если родительский мувик будет лежать под каким-то слоем, то и остальные , дочерние, тоже будут под этим слоем.


Что-то я сегодня нездорово добрый :-(

Nox Noctis 11.07.2002 05:48

дополнение насчет МХ:

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

клипы, которые ты кладешь в таймлайн ручками в редакторе размещаются по отрицательным глубинам(глубины начиная с -16384 (это отрицательная половинка типа signed int))

(...что будет если в редакторе создать 16385 клипов - остается только догадываться :)))... правда комп все равно помрет раньше - от инфаркта :)) )

можно дублировать, аттачить, и createMovieClip'ить в отрицательную глубину - таким образом перемещая динамически созданные объекты под статические.

НО swapDepths будет работать только при глубине большей или равной -16384

(кстати, глубина -16384 всегда остается свободной, если только ты специально не положишь туда что-нить... очень удобное свойство ;)) )

зы: эк меня пробило в пять утра :)))

Egoritch 11.07.2002 13:56

Ну Nox Noctis!!!!1 Ну порадовал!!!!

Круто!

DeliMIter 11.07.2002 17:17

Дополнение к Ноксу. Если на некоторой глубине находится клип, то следующая глубина, в которую флэш что-то кладет, индексуется +2, т.е. одна пропускается. Если на этой глубине лежит графика (глубина -16383 для любого клипа), то пропуска не происходит. От того, как в проекте лежат лэйеры и клипы в этих лэйерах, зависит только их очередность, глубина же выставляется в строгом соответствии с вышеуказанным законом. В хелпе макромедия ведет пропаганду за то, чтобы аттачить и дупликэйтить клипы на такие глубины как 0, 1, и тэдэ. При этом указывается, что приаттаченные клипы всегда окажутся поверх надизайненных. Так вот, это гон. Глубина -17000 при непрозрачном бг, и вы никогда не увидите своего клипа!

Интересно будет проверить, а на какую глубину садятся программные лайны и филлы...

Nox Noctis 11.07.2002 17:30

угумс :))
про +2 я забыл :)

а насчет отрицательных глубин - повторюсь: меньше -16384 swapDepths не работает
так что если нужно будет свопнуть клипы лежащие глубже - придется морочиться и дублированием, ручками, менять их местами (при этом оба клипа естессно стартанут сначала и потрут свои переменные)...
в большинстве случаев такое нафиг не нужно :))
(все равно глубина -16384 ниже самой нижней графики)

Egoritch 11.07.2002 17:53

Ну прям "Всё, что Вы хотели узнать о getDepth и changeDepths, но стеснялись спросить" ;))))))

Крутой топик и полезный получился.

DeliMIter 11.07.2002 18:10

Да, давайте модератор вынесет его с пометкой "важно", а нам с Ноксом поставят по плюсику "за ужас".

2Nox

А по-моему можно свапить и ниже. Вечером проверю.

greyshaman 11.07.2002 18:20

Да низя низя. Вот полную зачистку сцены, через attachMovie пустому мувику в цикле, произвести можно. Зачем тока? хотя и занятно.

blackhund 11.07.2002 18:46

м-да... с глубиной все понятно. а все же. как мне решить такую проблему. есть слой (LayerN1), на котором намалеван объект. я в сценарии клипа, который находится над этим слоем (в слое LayerN2), создаю большое множество экземпляров еще одного клипа. только вот я хочу, чтобы эти экземпляры находились ПОД тем другим слоем (LayerN1). как это сделать? методы Flash MX не предлагать :)

зы
похоже я позорю своими сообщениями этот топик...

Nox Noctis 11.07.2002 18:55

2greyshaman
насчет зачистки - зачем аттач, когда createEmptyMovieClip работает мгновенно (в отличие от аттача) :))
типа
this.createEmptyMovieClip("temp", any_clip.getDepth());
temp.removeMovieClip();
и все киляется :))

2blackhund
в пятерке есть один-единственный способ:
все дубликаты делаешь _внутри_ какого-то клипа... и если их нужно все сразу подсунуть под что-то, то просто делаешь swapDepths общего клипа с этим чем-то :))
правда по отдельности свопнуть дубликаты с чем-то _вне_ этого внешнего клипа - невозможно...

greyshaman 11.07.2002 19:05

2 Nox Метод не срабатывает на графике (полная зачистка ;) ).
в отличии от
duplicateMovieClip EmptyMovieClip
и attachMovie

Nox Noctis 11.07.2002 19:27

2greyshaman
"на графике" - это в смысле без мувиклипов вообще ?
свободная от мувиклипов графика убивается при
_root.createEmptyMovieClip("", -16383);
так что нет никакой разницы... ;))

DeliMIter 11.07.2002 19:48

А знаете ли вы, что

createEmptyMovieClip
attachMovie (?) - не тестировал
duplicateMovieClip

хотя про них и написано в хелпе

Returns

Nothing

но на самом деле возвращают ссылку на результат своей работы (если они и хотель сделать ретурн насынг, то это ассемблерный баг), соответственно

createEmptyMovieClip("Clip", 0)._x = 50;

делает именно то, что вы подумали?

Nox Noctis 11.07.2002 20:03

вообще это слегка не по теме конечно...
но это известная фича :)) хэлп дырявый :) даже с эрратой...
в коде часто можно увидеть что-т типа:
a = this.createEmptyMovieClip(....);

кстати, объект мувиклип - далеко не единственный, где ретурн не прописан, но действует: к примеру методы addListener всех объектов возвращают true когда установят лисенер :) но ни в хелпе ни в эррате к хелпу об этом ни слова :))

greyshaman 12.07.2002 10:58

Вернемся к теме. Про индексирование +2, это вы загнули, не сходится, просто ++.

Nox Noctis 12.07.2002 14:07

если просто создать клип, сделать кучу его дубликатов (Ctrl+D) а потом прогнать
for (i in _root) {
if (_root[i] instanceof MovieClip) {
trace(_root[i]+" :: "+_root[i].getDepth());
}
}
то порядок идет именно +2

видимо такой порядок может нарушиться при каких-то операциях... мне влом экспериментировать если честно :))

УильямБрэдберри 14.07.2002 19:07

Цитата:

Оригинал написал(а) DeliMIter
В хелпе макромедия ведет пропаганду за то, чтобы аттачить и дупликэйтить клипы на такие глубины как 0, 1, и тэдэ.
:)

Дело в том, что такая полезная штука, как removeMovieClip()
работает исключительно с положительными левелами.

-16384 - у нас _level root-а.

и если ты зааттачил или же создал клип в _level < 0
то просто так ты его не ремувнёшь.

отсюда же вытекает забавная фича - можно ремувить любой мувик, задав ему _level > 0 с помощью "swapDepths([_level > 0]);"

Nox Noctis 15.07.2002 16:48

Цитата:

Оригинал написал(а) УильямБрэдберри
Дело в том, что такая полезная штука, как removeMovieClip()
работает исключительно с положительными левелами.

зато unloadMovie работает с любыми левелами :))

и поясни насчет "swapDepths([_level > 0]);" :) че-то я не понял в чем пепс :)
swapDepths(_level>=-16384) работает нормально, а при _level<-16384 просто не работает, но ничего при этом не ремувит...

Nox Noctis 16.07.2002 20:57

-16384.....
....глубина, глубина, я не твой. отпусти меня, глубина...

:)))))))))))))

metton 07.08.2003 16:09

Всё же не понял, что там с графикой? Как с ней связана глубина -16383?

2УильямБрэдберри
Цитата:

отсюда же вытекает забавная фича - можно ремувить любой мувик, задав ему _level > 0 с помощью "swapDepths([_level > 0]);"
А как же баг swapDepths при взаиможействии с "ручными" клипами? Ведь делая swapDepths, мы имеем 2 клипа...

Nox Noctis 07.08.2003 17:30

Цитата:

Оригинал написал(а) metton
мы имеем 2 клипа...
минздрав предупреждает... :))

и вообще - то был частный случай :)
если свапишь не-динамический клип, он начинает действовать как динамический... т.е. не удаляется при переходе по таймлайну. вот и все.

metton 08.08.2003 01:44

2Nox Noctis
Цитата:

если свапишь не-динамический клип, он начинает действовать как динамический... т.е. не удаляется при переходе по таймлайну. вот и все.
Не понял... А когда же удаляется динамический?


А что с графикой? (см. мой прдыдущий пост)

greyshaman 08.08.2003 14:42

Точно точно ИЗВРАТ.
Когда вектора рисуютя прямо в слое, они что естественно, имеют глубину слоя, на слой понятие чет-нечет не распространяется.

metton 08.08.2003 19:47

2greyshaman
Это ты кому?! :confused:


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

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