Форум 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"? и все проблемы сразу решатся =/

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

Регистрация: Dec 2005
Сообщений: 219
Отправить сообщение для _sestra_ с помощью ICQ Отправить сообщение для _sestra_ с помощью Skype™
Дело в том, что while можно прервать только break; другие события, как ты уже заметил, будут выполнятся только после завершения цикла...
Лучше вообще убрать цикл и поставить проверку на Out...

примерно так:

//parent_text_city.stop();
function inObl(AParent) {
parent_text_city.nextFrame();
if (parent_text_city._currentframe >= 11 || !Play) {
clearInterval(AParent.IDInterval);
}
}
function obl() {
//......
IDInterval = setInterval(inObl, 50, this);
updateAfterEvent();
}
parent_text_city.onRollOver = function() {
//......
Play = true;
obl();
}
parent_text_city.onRollOut = function() {
//......
Play = false;
}


надеюсь поможет

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

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

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


 


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


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