![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Модрон-ветеринар
|
В силу недостаточного знания теории столкнулся с непониманием одной детали работы класса Tween.
Допустим у нас есть (например создали) мувик mc. В нем создали новый Tween. В какой-то мемент понадобилось удалить mc. При этом tween продолжает работать как ни в чем ни бывало, хотя объект-родитель уже отсутствует на сцене. (В случае моего проекта это приводит к краху ролика). Код для примера: import mx.transitions.Tween; var SteO:Object = mx.transitions.easing.Strong.easeOut; var mc:MovieClip = this.createEmptyMovieClip('mc', 0); mc.tw = new Tween(mc, null, SteO, null, null, 30, true); mc.tw.onMotionChanged = function () { trace('time: ' + this.time + ' object: ' + this.obj); //выводит время tween'а и ссылку на объект, который tween'ится }; btn.onRelease = function () { trace(mc.tw); mc.removeMovieClip(); trace(mc.tw); }; 1. Нажимаем кнопку, удаляем мувик. Но tween продолжает работу: time: 0.035 object: _level0.mc time: 0.125 object: _level0.mc time: 0.215 object: _level0.mc time: 0.304 object: _level0.mc time: 0.387 object: _level0.mc time: 0.476 object: _level0.mc time: 0.564 object: _level0.mc [Tween] //момент нажатия undefined //после удаления мувика-родителя time: 0.652 object: time: 0.74 object: time: 0.828 object: time: 0.911 object: 2. Если перед удалением сделать остановку tween, то все в порядке: btn.onRelease = function () { trace(mc.tw); mc.tw.stop(); mc.removeMovieClip(); trace(mc.tw); }; time: 0.033 object: _level0.mc time: 0.119 object: _level0.mc time: 0.207 object: _level0.mc time: 0.295 object: _level0.mc time: 0.383 object: _level0.mc time: 0.468 object: _level0.mc time: 0.556 object: _level0.mc [Tween] undefined Собственно, вопрос. Отчего tween продолжает работать? И значит ли все это, что при моей задаче, когда необходимо удалить мувик, перед этим необходимо также останавливать весь набор tween'ов, которые присутствуют в мувике? Вопрос не праздный, была ошибка в одном проекте: в одном из tween'ов некого мувика на его исполнение (onMotionChanged) присутствовали вызовы других функций и циклы, все это наглухо вешало ролик после удаления мувика-родителя tween'a, поскольку tween продолжал отрабатываться, а все, что с ним связано, еще как-то пыталось выполняться.
__________________
Идите первым! Последний раз редактировалось mooncar; 04.09.2010 в 03:15. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Tween создает в корне ролика клип, которому назначает onEnterFrame. Из-за этого он продолжает спокойно работать. Посмотрите файл Classes/mx/transitions/Tween.as - это сам Твин, он использует OnEnterFrameBeacon.as, где как раз и создается _root.createEmptyMovieClip. Примерно так.
Можно попробовать прописать удаление всех созданных твинов на событии mc.onUnload, чтобы отдельно их не удалять. Последний раз редактировалось rainbowrussia; 04.09.2010 в 06:25. |
|
|||||
|
Модрон-ветеринар
|
Спасибо, rainbowrussia, я примерно что-то такое себе и представлял.
Не очень только понятно, почему создается _root.createEmptyMovieClip, а не в текущем мувике.
__________________
Идите первым! |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:39. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|