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

vikingcompany 06.07.2008 01:22

Маска и глубина вложения клипа
 
В управляющем мувике динамически создаю клип, в который подгружаю мувик с контентом.
При попытке накрыть этот клип маской - ничего не выходит:
Код:

createEmptyMovieClip("content", 0);
content.setMask (mask_mc);
content.loadMovie("content.swf");

Однако, если внутри созданного клипа создать ещё один клип и грузить туда - всё получается:
Код:

createEmptyMovieClip("content", 0);
content.setMask (mask_mc);
content.createEmptyMovieClip("content_in", 0);
content.content_in.loadMovie("content.swf");

Почему так происходит?
И нельзя ли обойтись без создания клипа в клипе?

iNils 06.07.2008 02:31

Маску надо назначать после полной загрузки подгружаемого клипа.

vikingcompany 06.07.2008 21:11

Перенёс команду setMask на последний кадр управляющего мувика,
дав, таким образом, подгружаемому мувику полностью загрузиться.
Действительно, маска наложилась.
Однако уже при следующей загрузке (контент-то периодически меняется!) маска снялась :-(
Приходится мудрить, куда дополнительно вписывать setMask - удовольствия мало.

Удивительно, что при создании "клипа в клипе" ничего подобного не происходит -
маска надёжно накрывает верхний клип и не снимается.
Понять, почему так происходит, здравому человеку не дано ...

scarbo 06.07.2008 21:19

Лучше,если контент не стабилен,как раз такую матрешку делать,надежнее.

vikingcompany 06.07.2008 21:35

Ну он не то чтобы "нестабилен", просто обновляется периодически :-)
Отлично сказано - "матрёшка"! А я пытался слово подобрать!
И знаешь, я тоже пришёл к вывод такому выводу ...

Но только мне, всё-таки, хотелось бы понять: ну почему, ПОЧЕМУ так происходит?

Wolsh 06.07.2008 21:38

Цитата:

Понять, почему так происходит, здравому человеку не дано ...
Дело в том, что после загрузки содержимого в мувик весь код, действовавший на него до этого, сбрасывается. Это уже ДРУГОЙ мувик, даже если лежит тамже и также называется - он как будто только что был создан. Поэтому маска перестает действовать - она действовала на тот, предыдущий мувик, а этот - другой, новый.
По этой причине маска, повешенная на внешний для загружаемого мувик-контейнер, продолжает действовать - ведь контейнер сам не изменился, только его содержимое.
Вот еще пример. Вы грузите свф-файл в некий мувик mc. Как Вы будете к нему адресоваться? Например, чтобы произвести в этом загруженном свф переход на третий кадр, Вы напишите mc.gotoAndStop(3); потому что mc и есть теперь этот свф. Так понятно? И то, что Вы вешали некогда маску на mc - отменится, потому что ТОГО mc уже нет, есть совершенно новый mc, НЕ СОДЕРЖАЩИЙ в себе свф-файл, а им и ЯВЛЯЮЩИЙСЯ.

vikingcompany 06.07.2008 23:35

Цитата:

Сообщение от Wolsh (Сообщение 750448)
Дело в том, что после загрузки содержимого в мувик весь код, действовавший на него до этого, сбрасывается. Это уже ДРУГОЙ мувик ...

Цитата:

Сообщение от Wolsh (Сообщение 750448)
По этой причине маска, повешенная на внешний для загружаемого мувик-контейнер, продолжает действовать - ведь контейнер сам не изменился, только его содержимое.

Цитата:

Сообщение от Wolsh (Сообщение 750448)
Вы грузите свф-файл в некий мувик mc.
...mc и есть теперь этот свф. ... И то, что Вы вешали некогда маску на mc - отменится, потому что ТОГО mc уже нет, есть совершенно новый mc, НЕ СОДЕРЖАЩИЙ в себе свф-файл, а им и ЯВЛЯЮЩИЙСЯ.

Что ж, теперь всё стало на свои места. Спасибо за столь подробные разъяснения.
Мне ясно одно: всё это - просто особенность программы.
Бывает встречюсь с такой особенностью - так аж злость берёт: уж больно баг напоминает!
А потом, подумав, понимаю: если звёзды зажигаются - значит это кому-нибудь мужно ;-)

Wolsh 07.07.2008 00:29

Очень просто понять, зачем так, "кому это нужно", если вспомнить, что в подгружаемом мувике тоже может содержаться код, в том числе управляющий роисходящим в отцовском клипе и даже в руте основной флэшки. И вот представьте себе ситуацию - сайт, страницы подгружаются отдельно как файлы свф в некий мувик page_mc. Страница загрузилась и сказала -
Код:

this.onEnterFrame = function  () {
        this._x = Math.random()*150;
}

И она дергается))) Юзер жмет меню и грузится следующий файл свф в мувик page_mc. И он дергаться не будет, потому что код, запущенный предыдущей флэшкой, перестал действовать. А теперь представьте, сколько всякого кода пришлось бы писать в каждой флэшке-странице, чтобы наотменять всё, запущенное предыдущими? Хватает и того ужаса, что простые свойства вроде альфы всётаки сохраняются (((((.

vikingcompany 07.07.2008 11:58

Цитата:

Сообщение от Wolsh (Сообщение 750467)
... представьте себе ситуацию - сайт, страницы подгружаются отдельно как файлы свф в некий мувик page_mc ...

В проекте, над которым я сейчас работаю, всё именно так.

Цитата:

Сообщение от Wolsh (Сообщение 750467)
И он дергаться не будет, потому что код, запущенный предыдущей флэшкой, перестал действовать.

Цитата:

А теперь представьте, сколько всякого кода пришлось бы писать в каждой флэшке-странице, чтобы наотменять всё, запущенное предыдущими?
Это хорошо лишь в том случае, когда нам больше не надо, чтобы тот дёргался.
А вот если надо? Всё равно придётся писать код :-)

Wolsh 07.07.2008 12:45

Да. Только в этом случае Вы знаете, какой код писать, и пишете о том, чего хотите от этого мувика, а не всё то, чего Вы от него не хотите :). Нередко Вы и знать не знаете, что другой мувик мог наделать. Во всяком случае, в проекте сложнее трех заранее известных страниц)))
Да что тут спорить, просто всегда когда сталкиваешься с необходимостью сделать лишнее, как тебе кажется, движение начинаешь ругать разрабов. А когда этот же принцип в другом твоем проекте отлично работает, этого просто не замечаешь.

vikingcompany 07.07.2008 15:08

Цитата:

Сообщение от Wolsh (Сообщение 750539)
... всегда когда сталкиваешься с необходимостью сделать лишнее, как тебе кажется, движение начинаешь ругать разрабов. А когда этот же принцип в другом твоем проекте отлично работает, этого просто не замечаешь.

Что правда, то правда :-)
Придумал! Надо бы клипам новое свойство добавить: clip._keepProperties = true.
Тогда можно будет выбирать - сохраняться свойствам или нет )))))


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

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