![]() |
|
||||||||||
|
|||||
|
Регистрация: Oct 2005
Сообщений: 33
|
Есть следующий код
function inObl(){ parent_text_city.nextFrame(); } ... function obl(){ while(parent_text_city._currentframe<11){ IDInterval=setInterval(inObl(), 500); updateAfterEvent(); } } Через трассировку смотрю - номер кадра увеличивается, но на экране ничего не обновляется, хотя с 1 по 11 кадр должна меняться _alpha от 0 до 100%. Обновление происходит после выхода из функции-обработчика _root.mc.onRollOver = function() { obl() }; Но вся обработка происходит в функции obl() и нужно чтобы обновление происходило именно по ходу выполнения этой функции. Прошу помочь. |
|
|||||
|
1. setInterval(inObl(), 500); - неправильный синтаксис. Нужно записать вот как: setInterval(inObl, 500); т.е. вместо значения функции нужно ставить имя функции (без скобок)
2. Цитата: updateAfterEvent - функция; перерисовывает экран(не зависит от установленной для документа частоты кадров) при вызове ее в обработчике событий onClipEvent() или ИЗ ФУНКЦИИ/МЕТОДА, вызываемых посредством setInterval(). Flash игнорирует все прочие вызовы updateAfterEvent. Ставь updateAfterEvent() в функцию inObl(). 3. интервал в 500 мс означает, что функция будет вызываться 2 раза в секунду. Частота смены кадров по умолчанию - 12. |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 33
|
1. имя функции без скобок - это я знаю. В этом случае при трассировке все, что вызывается посредством setInterval() выполняется в самую последнюю очередь, т.е. если бы в функции mc.OnRollOver после inObl стояла еще пара функций, то сначала выполнились бы они, а потом setInterval(). Такой вариант меня, к сожалению тоже не устраивает.
2. Я сделал: function inObl(){ parent_text_city.nextFrame(); updateAfterEvent(); } но изменений никаких нет. Попрежнему не обновляется. 3. С этим пунктом у меня, кстати, тоже трудности. Я ставил интервал в 5 мс. но кадры идут гораздо медленнее. fps стоит 120. Если можно, прошу пояснить, с чем это может быть связано. |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 33
|
Я довольно невнятно обрисовал ситуацию. Хочу немного поправить. setInterval(inObl, 500), т.е. inObl без скобок - это хороший вариант. Он работает. Проблема в том, что пока мы не пробежимся по всем 11 кадрам, вызвать clearInterval я не могу.
Пример: я навожу мышь на объект mc, срабатывает событие onRollOver, в нем выполняется setInterval (соответственно в функции inObl выполняется nextFrame. Доходим до 6 кадра и я убираю мышь с объекта. После этого сразу должно выполняться событие onRollOut. А на самом деле получается, что сначала проходит до конца ролика (до 11 кадра), а затем начинает выполняться onRollOut. Надеюсь, этим сообщением я помог понять смысл моей проблемы, а не запутал еще больше. |
|
|||||
|
насколько я понял, перед тобой стоит задача при наведении мышки на кнопку запустить мувик и дать ему проиграться до конца, независимо от того, будет ли мышка убрана с кнопки.
_root.mc.onRollOver = function() { if(parent_text_city._currentFrame == 1) parent_text_city.play(); }; _root.mc.onRollOut = function() { //никаких действий для parent_text_city } а что касается clearInterval - для этого нужно знать, какой интервал очищать. var my_interval=setInterval(someFunction,some_time); . . . clearInterval(my_interval); |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 33
|
Нет, наоборот. Задача в том, чтобы при наведении на MOVIECLIP (а не кнопка) этот movieclip запускался, а если мышка убрана - проигрывание сразу останавливается (независимо от того, проиграли мы все кадры или нет) и сразу запускается onRollOver.
Что касается clearInterval, то имя интервала я знаю. Я не могу перейти к строке, в которой записано: clearInterval(my_interval) до тех пор, пока не проиграются все 11 кадров. |
|
|||||
|
Регистрация: Nov 2003
Адрес: Север
Сообщений: 244
|
а нельзя этот мувиклип запихать в кнопку в "Over"? и все проблемы сразу решатся =/
|
|
|||||
|
Регистрация: Oct 2005
Сообщений: 33
|
У меня таких мувиков около 30. Для каждого создавать кнопку - это не очень хорошо, по-моему. Нельзя ли найти другой выход?
Быть может можно изменить функцию следующим образом: function obl(){ if ((parent_text_city._currentframe<11) and (MC.ONROLLOVER()){ IDInterval=setInterval(inObl(), 500); } } Т.е. меня интересует, можно ли в условии if проверять, находится мышь в пределах мувиклипа или нет? |
|
|||||
|
Регистрация: Nov 2003
Адрес: Север
Сообщений: 244
|
можно в событии "on (rollOver)" кнопки устанавливать какое-то определенное значение какой-либо переменной, а в условии if его проверять... вот...
но, соответственно, будет задержка, зависящая от того, как часто ты эту переменную проверяешь... попробуй -- может в твоем случае это некритично. |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 33
|
Основная проблема в том, что я не могу выйти из функции inObl(), которую использует setInterval, до тех пор пока не пробегусь по всем 11 кадрам. Следовательно, я не смогу проверять эту переменную. Все сводится к тому, что мне нужно узнать, когда мышь покинула область мувиклипа и сразу после этого выйти из функции inObl() не доигрывая мувиклип до конца, а просто прерывая его на том кадре, до которого он дошел.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 11:44. |
|
|
« Предыдущая тема | Следующая тема » |
|
|