Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Проблема с обновлением картинки (http://www.flasher.ru/forum/showthread.php?t=72946)

Dub_Alex 08.12.2005 15:59

Проблема с обновлением картинки
 
Есть следующий код
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() и нужно чтобы обновление происходило именно по ходу выполнения этой функции.
Прошу помочь.

Dimchansky 08.12.2005 16:29

1. setInterval(inObl(), 500); - неправильный синтаксис. Нужно записать вот как: setInterval(inObl, 500); т.е. вместо значения функции нужно ставить имя функции (без скобок)

2. Цитата: updateAfterEvent - функция; перерисовывает экран(не зависит от установленной для документа частоты кадров) при вызове ее в обработчике событий onClipEvent() или ИЗ ФУНКЦИИ/МЕТОДА, вызываемых посредством setInterval(). Flash игнорирует все прочие вызовы updateAfterEvent.
Ставь updateAfterEvent() в функцию inObl().

3. интервал в 500 мс означает, что функция будет вызываться 2 раза в секунду. Частота смены кадров по умолчанию - 12.

Dub_Alex 08.12.2005 16:50

1. имя функции без скобок - это я знаю. В этом случае при трассировке все, что вызывается посредством setInterval() выполняется в самую последнюю очередь, т.е. если бы в функции mc.OnRollOver после inObl стояла еще пара функций, то сначала выполнились бы они, а потом setInterval(). Такой вариант меня, к сожалению тоже не устраивает.
2. Я сделал:
function inObl(){
parent_text_city.nextFrame();
updateAfterEvent();
}
но изменений никаких нет. Попрежнему не обновляется.
3. С этим пунктом у меня, кстати, тоже трудности. Я ставил интервал в 5 мс. но кадры идут гораздо медленнее. fps стоит 120. Если можно, прошу пояснить, с чем это может быть связано.

Dub_Alex 08.12.2005 17:12

Я довольно невнятно обрисовал ситуацию. Хочу немного поправить. setInterval(inObl, 500), т.е. inObl без скобок - это хороший вариант. Он работает. Проблема в том, что пока мы не пробежимся по всем 11 кадрам, вызвать clearInterval я не могу.
Пример: я навожу мышь на объект mc, срабатывает событие onRollOver, в нем выполняется setInterval (соответственно в функции inObl выполняется nextFrame.
Доходим до 6 кадра и я убираю мышь с объекта. После этого сразу должно выполняться событие onRollOut. А на самом деле получается, что сначала проходит до конца ролика (до 11 кадра), а затем начинает выполняться onRollOut.
Надеюсь, этим сообщением я помог понять смысл моей проблемы, а не запутал еще больше.

Dimchansky 08.12.2005 17:31

насколько я понял, перед тобой стоит задача при наведении мышки на кнопку запустить мувик и дать ему проиграться до конца, независимо от того, будет ли мышка убрана с кнопки.

_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);

Dub_Alex 08.12.2005 17:46

Нет, наоборот. Задача в том, чтобы при наведении на MOVIECLIP (а не кнопка) этот movieclip запускался, а если мышка убрана - проигрывание сразу останавливается (независимо от того, проиграли мы все кадры или нет) и сразу запускается onRollOver.
Что касается clearInterval, то имя интервала я знаю. Я не могу перейти к строке, в которой записано:
clearInterval(my_interval)
до тех пор, пока не проиграются все 11 кадров.

nyctota 08.12.2005 19:40

а нельзя этот мувиклип запихать в кнопку в "Over"? и все проблемы сразу решатся =/

Dub_Alex 09.12.2005 12:15

У меня таких мувиков около 30. Для каждого создавать кнопку - это не очень хорошо, по-моему. Нельзя ли найти другой выход?
Быть может можно изменить функцию следующим образом:
function obl(){
if ((parent_text_city._currentframe<11) and (MC.ONROLLOVER()){
IDInterval=setInterval(inObl(), 500);
}
}
Т.е. меня интересует, можно ли в условии if проверять, находится мышь в пределах мувиклипа или нет?

nyctota 09.12.2005 12:30

можно в событии "on (rollOver)" кнопки устанавливать какое-то определенное значение какой-либо переменной, а в условии if его проверять... вот...
но, соответственно, будет задержка, зависящая от того, как часто ты эту переменную проверяешь... попробуй -- может в твоем случае это некритично.

Dub_Alex 09.12.2005 12:54

Основная проблема в том, что я не могу выйти из функции inObl(), которую использует setInterval, до тех пор пока не пробегусь по всем 11 кадрам. Следовательно, я не смогу проверять эту переменную. Все сводится к тому, что мне нужно узнать, когда мышь покинула область мувиклипа и сразу после этого выйти из функции inObl() не доигрывая мувиклип до конца, а просто прерывая его на том кадре, до которого он дошел.


Часовой пояс GMT +4, время: 13:30.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.