Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.12.2005, 15:59
Dub_Alex вне форума Посмотреть профиль Отправить личное сообщение для Dub_Alex Найти все сообщения от Dub_Alex
  № 1  
Ответить с цитированием
Dub_Alex

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

Старый 08.12.2005, 16:29
Dimchansky вне форума Посмотреть профиль Отправить личное сообщение для Dimchansky Посетить домашнюю страницу Dimchansky Найти все сообщения от Dimchansky
  № 2  
Ответить с цитированием
Dimchansky

Регистрация: Jul 2005
Сообщений: 225
Отправить сообщение для Dimchansky с помощью ICQ
1. setInterval(inObl(), 500); - неправильный синтаксис. Нужно записать вот как: setInterval(inObl, 500); т.е. вместо значения функции нужно ставить имя функции (без скобок)

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

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

Старый 08.12.2005, 16:50
Dub_Alex вне форума Посмотреть профиль Отправить личное сообщение для Dub_Alex Найти все сообщения от Dub_Alex
  № 3  
Ответить с цитированием
Dub_Alex

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

Старый 08.12.2005, 17:12
Dub_Alex вне форума Посмотреть профиль Отправить личное сообщение для Dub_Alex Найти все сообщения от Dub_Alex
  № 4  
Ответить с цитированием
Dub_Alex

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

Старый 08.12.2005, 17:31
Dimchansky вне форума Посмотреть профиль Отправить личное сообщение для Dimchansky Посетить домашнюю страницу Dimchansky Найти все сообщения от Dimchansky
  № 5  
Ответить с цитированием
Dimchansky

Регистрация: Jul 2005
Сообщений: 225
Отправить сообщение для Dimchansky с помощью ICQ
насколько я понял, перед тобой стоит задача при наведении мышки на кнопку запустить мувик и дать ему проиграться до конца, независимо от того, будет ли мышка убрана с кнопки.

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

Старый 08.12.2005, 17:46
Dub_Alex вне форума Посмотреть профиль Отправить личное сообщение для Dub_Alex Найти все сообщения от Dub_Alex
  № 6  
Ответить с цитированием
Dub_Alex

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

Старый 08.12.2005, 19:40
nyctota вне форума Посмотреть профиль Отправить личное сообщение для nyctota Найти все сообщения от nyctota
  № 7  
Ответить с цитированием
nyctota
 
Аватар для nyctota

Регистрация: Nov 2003
Адрес: Север
Сообщений: 244
а нельзя этот мувиклип запихать в кнопку в "Over"? и все проблемы сразу решатся =/

Старый 09.12.2005, 12:15
Dub_Alex вне форума Посмотреть профиль Отправить личное сообщение для Dub_Alex Найти все сообщения от Dub_Alex
  № 8  
Ответить с цитированием
Dub_Alex

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

Старый 09.12.2005, 12:30
nyctota вне форума Посмотреть профиль Отправить личное сообщение для nyctota Найти все сообщения от nyctota
  № 9  
Ответить с цитированием
nyctota
 
Аватар для nyctota

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

Старый 09.12.2005, 12:54
Dub_Alex вне форума Посмотреть профиль Отправить личное сообщение для Dub_Alex Найти все сообщения от Dub_Alex
  № 10  
Ответить с цитированием
Dub_Alex

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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