Просмотр полной версии : Видимые/невидимые объекты
Возможно мне надо удалить мозг, но в FAQ не нашел.
1. Первый вопрос.
Есть объект. Объект исчезает из видимости. Например, клип переходит во фрейм, где этот объект отсутствует.
Проблема: после этого он перестает быть доступен для Action Script.
А мне нужно изменить его свойства в ДРУГИХ фреймах. НЕ текущих.
Что делать?
(сейчас использую костыль - объект не удаляю, а просто увожу его далеко-далеко за границы сцены, и делаю невидимым. Адски неудобно! Потому что клип постоянно изменяется.)
2. Второй вопрос.
Мне нужно выполнить действие ПОСЛЕ того как фрейм полностью отрендерился. Ну, или как вариант - после того как они уже стали доступны Action Script'у. События OnRender и OnEnterFrame работают именно при входе во фрейм. Когда еще ничего нету. Есть какое-нибудь событие, которое работает "на завершении" фрейма?
(таким образом, кажется, работает код, вписанный в сам фрейм. Но этого делать нельзя в силу идеалогии третьей версии языка. Сейчас я все действия выполняю с помощью приаттаченного к клипу файла с исходником всех действий. Все события обрабатываю именно как события. Поэтому вариант "пиши код в кадрах" большая просьба не предлагать. Мне интересно как можно именно перехватить момент, когда фрейм уже отрисован)
chingachgoog
13.07.2007, 13:33
1. Первый вопрос.
Есть объект. Объект исчезает из видимости. Например, клип переходит во фрейм, где этот объект отсутствует.
Проблема: после этого он перестает быть доступен для Action Script.
А мне нужно изменить его свойства в ДРУГИХ фреймах. НЕ текущих.
Что делать?
Объект по-любому должен быть на фреймах.
Далее есть два варианта:
1) _visible=false
2) Делать в объекте пустой кадр и переводить на этот кадр при необходимости.
2. Второй вопрос.
Мне нужно выполнить действие ПОСЛЕ того как фрейм полностью отрендерился.
А не будет ли это моментом перехода на следующий фрейм?
Объект по-любому должен быть на фреймах.
Да? Печально. Значит, всё что имеет состояния придется кодить вручную, без редактора :(
Убиться, хоть свой редактор пиши.
А не будет ли это моментом перехода на следующий фрейм?
Нет, не будет.
Там такое дело - один кадр - одно состояние грубо-говоря-меню... Каждый следующий кадр в общем-то ничем кроме идеи с предыдущим не связан. Поэтому вся навигация производится с помощью gotoAndStop, а значит на следующие кадры он не переходит.
Конечно, можно будет сделать "дырчатый" мувик. Типа, каждый кадр дублируется два раза. Ссылка ссылается на первый кадр, делает goToAndStop на второй кадр, а уже на enterFrame ко второму кадру приписывать собственно действие. Но это неправильный стиль программирования, просто ужасный.
Блин, ну должно, должно быть такое событие! В WinAPI например оно есть :))
Это ошибка в организации, раз такие сложности возникают.
chingachgoog
13.07.2007, 13:50
Может оно все гораздо проще, но можно сделать так:
создать самым верхним слоем мувик - т.к. его код будет выполняться самым последним в фрейме, то следовательно, как только код начнет выполняться - значит все до этого уже отрисовано-выполнено.
Это ошибка в организации, раз такие сложности возникают.
Это бесспорно ошибка в организации.
И в моей, и во флеше.
Я размышлял так: клип по сути есть отличный автомат, с конечным числом состояний. Которые, главное, удобно просматривать, всего лишь выбирая мышкой нужный кадр.
То есть если есть клип, то им можно выразить любой объект, имеющий состояния.
Дальше - организация как у любого графического интерфейса.
Один кадр клипа - один кусок интерфейса.
Каждый элемент интерфейса, в т.ч. не только кнопки, но и движущиеся элементы, анимации и прочее - постоянно кидают события, в зависимости от того, что произошло.
К мувику приложен файл на AS3. В файле прописано соответствие ловящихся событий и функций, которые выполняет клип.
По-моему логично.
Но нерабоче :(
Где-то я читал о DisplayLists... Может быть, как-нибудь вручную можно внести объект в DisplayList?
Может оно все гораздо проще, но можно сделать так:
создать самым верхним слоем мувик - т.к. его код будет выполняться самым последним в фрейме, то следовательно, как только код начнет выполняться - значит все до этого уже отрисовано-выполнено.
Я сделал так.
Состояния рисую все так же в одном клипе, но по типу одно состояние - один слой. Удобно для редактирования. В то время, как редактирую какое-либо состояние, просто ручками на таймлайне делаю невидимыми все остальные ненужные слои.
Все подконтрольные объекты имеют свои instance-имена.
Дальше делаю массивы с этими объектами, в которые группирую по смыслу. По сути, один слой - один массив.
Массивы регистрируются при старте мувика в приаттаченном скрипте.
Далее есть функции DisplayWindow и HideWindow которые присваивают visible=false нужному массиву.
Таким образом, все еще можно рисовать ручками :)
Но всё равно обидно. Ищется событие onFrameValidated :)
chingachgoog
13.07.2007, 14:05
Много вещей сделано именно таким образом.
Что мешает сделать в клипе еще один слой - самый верхний, с пустым мувиком, который будет при инициализации отдавать команду (флаг)?
Много вещей сделано именно таким образом.
Что мешает сделать в клипе еще один слой - самый верхний, с пустым мувиком, который будет при инициализации отдавать команду (флаг)?
Идеалогия. Нельзя писать код в кадрах клипов :)
chingachgoog
13.07.2007, 14:18
А зачем обязательно писать в клипе? Назначьте извне
А зачем обязательно писать в клипе? Назначьте извне
Да, это идея. Спасибо :)
Адский хак.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.