![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2011
Сообщений: 16
|
Не хватает ума понять, где ошибка.
Общая суть: Есть анимация из сорока кадров. При нажатии на кнопку, анимация включается с текущего момента и идет до момента назначенного на эту кнопку. Если анимация дошла до конца (40 кадр), а нужный момент еще не достигнут (например: из 30 кадра надо перейти в 5ый), тоанимация проигрывается с 1го кадра. Идея реализации: цикл в каждом кадре проверяет свою позицию. если позиция на последнем кадре, то происходит переход на 1ый кадр + прибавляется еще 1; если анимация достигла нужного места, то она останавливается. А уж для того, чтобы это была анимация, а не мгновенный переход, есть таймеры, которые переводит анимацию на 1 кадр вперед только через 1/30 секунды. Только вот все это не работает и не могу понять почему!)Может есть простые пути, а я загнался? function onClick(e:MouseEvent):void { for (var i:int = 0;i<41;i++){ var curframe:int; curframe = MovieClip(root).currentFrame; if (curframe == 40){ MovieClip(root).gotoAndStop(1); var myTimer1:Timer = new Timer(33,1); myTimer1.start(); myTimer1.addEventListener(TimerEvent.TIMER, nextframe); function nextframe(e:TimerEvent):void { MovieClip(root).nextFrame(); } } if (curframe == 20){ stop(); break; } else{ var myTimer2:Timer = new Timer(2000,1); myTimer2.addEventListener(TimerEvent.TIMER, nextframe2); myTimer2.start(); function nextframe2(e:TimerEvent):void { MovieClip(root).nextFrame(); } } |
|
|||||
|
Регистрация: May 2010
Сообщений: 543
|
Цитата:
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с) |
|
|||||
|
Регистрация: Apr 2011
Сообщений: 16
|
Я знаю, что это ужас) А с ентерфреймом как, подскажите пожалуйста?
Добавлено через 36 минут Всё, спасибо огромное, разобрался! помогли глубокие вздохи и энтерфрейм) Вместо всей моей дребедени получилось: function onClick(e:MouseEvent):void { addEventListener (Event.ENTER_FRAME, onFrameHandler); function onFrameHandler(e:Event){ var curframe:int; curframe = MovieClip(root).currentFrame; MovieClip(root).play(); if (curframe == 40){ MovieClip(root).gotoAndPlay(1); } if (curframe == 20){ stop(); removeEventListener (Event.ENTER_FRAME, onFrameHandler); } } } |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 300
|
XeODimaN
У тебя функция в функции? ИМХО, это лишнее, onFrameHandler лучше вынести отдельно. |
|
|||||
|
Регистрация: Apr 2011
Сообщений: 16
|
Там несколько кнопок и для каждого клика разный фреймхендлер нужен. Или все равно их все вынести?
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Их обязательно надо выносить. |
|
|||||
|
Цитата:
__________________
...вселенская грусть |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Ну, собственно это я и имел в виду.
После выполнения родительской функции, вложенные становятся доступными для сборки мусора |
|
|||||
|
Неее. Не уничтожится она. На нее ведь ссылка у EventDispatcher-а сохраняется. Проблема там только в том, что от нее отписаться хрен знает как. Но это не существенная утечка памяти. И, при условии, что на протяжении всего цикла жизни отписка от события не понадобится - это приемлемо.
ПС: охото сказать, что лучше не привыкать к вложенным функциям, но не могу найти причину для этого замечания. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|