![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Jan 2001
Адрес: Украина
Сообщений: 284
|
Есть мувклип с несколькими ключевыми кадрами.Этот мувклип связан с классом.В первом кадре клипа стоит stop().Во втором лежит стандартный компонент.Его надо проинициализировать,повесить обработчики.После появления клипа на сцене и переходу к кадру с клипом.Обработчики компонента не работают.Если этот компонент положить в первый кадр - все нормально.Т.е. проблема в том что компонент нельзя проинициализировать если он лежит не в первом кадре.Как обойти проблему?
|
|
|||||
|
Регистрация: May 2006
Сообщений: 125
|
Может положить компонент на первый кадр, но например под маску или за пределы отображаемой области и проинициализировать как надо, а на втором кадре убрать маску или выставить правильные координаты?
![]() |
|
|||||
|
Регистрация: Jan 2001
Адрес: Украина
Сообщений: 284
|
Это выход,но не удобно при дизайне.Компонент перекрывает остальные элементы из 1-го кадра.Должен быть какой то програмный способ .Я забыл как это делается.Давно флеш брал в руки
|
|
|||||
|
можно их visible сделать фалс а визибл компонента тру. На каждый кейфрейм своя функция, ты не сможешь написать функцию на первом кадре для обьекта который находится на втором.
__________________
Учусь флэшу с 01.01.2009 Status: Beginner |
|
|||||
|
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
можно использовать событие
оно будет срабатывать каждый раз, когда произошло изменение кадра и содержимое добавлено. еще вариант, делать во втором кадре dispatchEvent своего события, например COMPONENT_ADDED, в классе подписаться на это событие и определить функцию, которая будет инициализировать компонент |
|
|||||
|
Регистрация: Jan 2001
Адрес: Украина
Сообщений: 284
|
Интересно получается Если в класс отвечающий за мувклип добавить обработку Event.ADDED то события компонента из 2-го кадра отрабатываются но при этом возникает ошибка:TypeError: Error #1009: Cannot access a property or method of a null object reference. !!!
Добавлено через 3 минуты Вообще это как то не "по людски".Если компонент находится в мувклипе то почему его нельзя проинициализировать если он не в первом кадре?Ведь когда мы кладем его из библиотеки на сцену то этим мы говорим системе(флешу) о присутствие экземпляра.Почему тогда его нельзя инициализировать? |
|
|||||
|
Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
|
считайте, что компонент во втором кадре - как локальная переменная в функции - пока вы не вызовете функцию - этой переменной не существует, и после того, как функция выполнится - локальная переменная перестанет существовать, так и с таймлайном.
Ошибка возникает в следствии того, что во втором кадре у вас кроме компонента есть еще какие-то элементы - обработчик срабатывает для них всех, вам нужно через e.target определить, что добавляемый элемент - именно ваш компонент |
|
|||||
|
Регистрация: Jan 2001
Адрес: Украина
Сообщений: 284
|
Выходит что добраться до компонента из 2-го кадра при текущем первой никак нельзя пока этот компонент не отобразиться на сцене,так?Может есть какой то способ получения ссылки на него не отображая 2-й кадр?
|
|
|||||
|
strange mood
|
Цитата:
![]() На самом деле компонент появляется в мувиклипе в тот момент, когда мувиклип переходит на кадр с этим компонентом - без этого вы до него никак не достучитесь.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
Регистрация: Jan 2001
Адрес: Украина
Сообщений: 284
|
Цитата:
Добавлено через 33 минуты Вот код на скорую руку: 1-й кадр две кнопки (b_1,b2)+stop() на кадре 2-й кадр два компонента(comp,res) package { import flash.display.MovieClip; import flash.display.SimpleButton; import fl.controls.Label; import fl.controls.NumericStepper; import flash.events.Event; import flash.events.MouseEvent; public class Comp_2 extends MovieClip { public function Comp_2() { initEvents(); //initParams(); } protected function initEvents() { b_1.addEventListener(MouseEvent.CLICK,onClickB1); b_2.addEventListener(MouseEvent.CLICK,onClickB2); addEventListener(Event.ADDED, eventComponentAdded); } private function eventComponentAdded(e:Event) { trace("eventComponentAdded="+e.target.name); if (e.target.name=="cmp") {initParams();} } protected function initParams() { cmp.addEventListener(Event.CHANGE, onChangeCmp); } protected function onClickB1(e:Event):void { gotoAndStop(1); } protected function onClickB2(e:Event):void { gotoAndStop(2); } protected function onChangeCmp(e:Event):void { res.text="Результат работы компонента:"+cmp.value; } } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:38. |
|
|
« Предыдущая тема | Следующая тема » |
|
|