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

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

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

Регистрация: Oct 2008
Адрес: Донецк
Сообщений: 26
По умолчанию Задержка на событие кнопки

Уважаемые, нужна ваша помощь. Как сделать задержку, чтобы событие ROLL_OVER происходило не сразу, а через 0,3 - 0,5 секунды? Где это правильно прописать? Спасибо.

Старый 18.11.2008, 03:20
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Само событие задержать нельзя, но можно прописать в обработчике setTimeout.
__________________
тонкий тролль, осеянный благодатью

Старый 18.11.2008, 07:19
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 3  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Можно расширить класс того, кому хотим задерживать, подписаться там на событие ROLL_OVER, и диспатчить вручную по таймауту наружу из экземпляра.
__________________
4am is time to rock

Старый 19.11.2008, 02:19
hetrus вне форума Посмотреть профиль Отправить личное сообщение для hetrus Найти все сообщения от hetrus
  № 4  
Ответить с цитированием
hetrus

Регистрация: Oct 2008
Адрес: Донецк
Сообщений: 26
Уважаемые, что-то я совсем запарился... Дело в том, что я еще далеко не ас в AS и в английском языке. В хелпе по setTimeout мало что понял, а слова
Цитата:
Сообщение от DarkLight Посмотреть сообщение
Можно расширить класс того, кому хотим задерживать, подписаться там на событие ROLL_OVER, и диспатчить вручную по таймауту наружу из экземпляра.
вообще приводят в уныние
Учусь в основном на примерах. Мне, в принципе, осталось доделать такое же юзабилити , как на сайте ibm.com. Там, если на флеше просто провести по кнопке мышкой, картинки не меняются. Чтобы новая картинка загрузилась, нужно наведенную на кнопку мышь подержать чуть-чуть подольше над кнопкой.
Можете как-то поподробней объяснить или черкануть код (хотя бы примерный)?
Заранее спасибо.

Старый 19.11.2008, 12:49
Xpb7 вне форума Посмотреть профиль Отправить личное сообщение для Xpb7 Найти все сообщения от Xpb7
  № 5  
Ответить с цитированием
Xpb7

Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
1. Идём в гугл.
2. Пишем "setTimeout as3" и уже из 1-го линка по коду всё понятно и без знания анг. языка.

А вообще Adobe рекомендует юзать Timer:
Цитата:
Use the new Timer class instead of setInterval/setTimeout. The new Timer class provides a cleaner mechanism for timer events than the setInterval and setTimeout functions. The new Timer class has a number of advantages over setInterval, such as not having to deal with interval ID numbers, and a more modern, object-oriented interface. We regard using Timer instead of setInterval and setTimeout as a best practice.


Последний раз редактировалось Xpb7; 19.11.2008 в 13:04.
Старый 19.11.2008, 19:04
hetrus вне форума Посмотреть профиль Отправить личное сообщение для hetrus Найти все сообщения от hetrus
  № 6  
Ответить с цитированием
hetrus

Регистрация: Oct 2008
Адрес: Донецк
Сообщений: 26
Ну, хорошо. Проверте мою логику непрограммиста (AS - мой первый язык).
1. При входе в OVER создаем таймер и запускаем его:
Код AS3:
btn_mc.addEventListener(MouseEvent.ROLL_OVER, creatTimer);
function creatTimer(e.MouseEvent):void
{
var myTimer:Timer = new Timer(500)//на пол-секунды;
myTimer.addEventListener("timer", newClip);
myTimer.start();
}
2. В функции newClip делаем проверку. Если мышь еще над кнопкой, запускаем функцию и проигрываем клип.
Если логика правильная, то как мне правильно сделать провеку ROLL_OVER?

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

блогер
Регистрация: Jul 2007
Адрес: Russia
Сообщений: 292
Записей в блоге: 5
Код AS3:
private var _timeoutId:int = -1;
sprite.addEventListener(MouseEvent.ROLL_OVER, onSpriteMouseRollOver);
sprite.addEventListener(MouseEvent.ROLL_OUT, onSpriteMouseRollOut);
 
private function onSpriteMouseRollOver(event:MouseEvent):void
{
     _timeoutId= setTimout(timeoutFunction, 500);
}
 
private function onSpriteMouseRollOut(event:MouseEvent):void
{
     clearTimout();
}
 
private function clearTimout():void
{
     if (_timeoutId != -1)
     {
          clearTimeout(_timeoutId);
         _timeoutId = -1;
     }
}
 
private function timeoutFunction():void
{
       clearTimout();
       // do something
}

По поводу того, что лучше использовать Timer вместо setTimout очень спрорный вопрос. Зачем плодить тяжелую сущность, если нам нужно просто поставить таймаут, а больше никакая информация не нужна
__________________
Оптимизация производительности на уровне кода

Старый 19.11.2008, 21:08
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
может и "тяжелая сущность", но выглядит изящнее на мой глаз:
Код AS3:
timer = new Timer(500, 1);
timer.addEventListener(TimerEvent.TIMER, timeoutFunction);
sprite.addEventListener(MouseEvent.ROLL_OVER, onSpriteMouseRollOver);
sprite.addEventListener(MouseEvent.ROLL_OUT, onSpriteMouseRollOut);
//////
private function timeoutFunction(e:TimerEvent):void 
{
	trace("do something");
}
 
private function onSpriteMouseRollOut(e:MouseEvent):void 
{
	timer.stop();
}
 
private function onSpriteMouseRollOver(e:MouseEvent):void 
{
	timer.start();
}

Старый 28.11.2008, 20:11
hetrus вне форума Посмотреть профиль Отправить личное сообщение для hetrus Найти все сообщения от hetrus
  № 9  
Ответить с цитированием
hetrus

Регистрация: Oct 2008
Адрес: Донецк
Сообщений: 26
Да, спасибо всем. Мне Таймер более понятен. Но у меня получается его использовать только для каждой кнопки отдельно. А вот в массиве я потерялся... куда его (Таймер) воткнуть?
У меня массивом реализовано (спасибо участникам форума ) увеличение кнопки и возвращение ее в рамер после наведения на другую кнопку.
Код AS3:
var btns:Array = [knop1_mc, knop2_mc, knop3_mc, knop4_mc];
var selectedButton:Sprite;
for (var i:uint = 0; i < btns.length; i++){
  btns[i].addEventListener(MouseEvent.ROLL_OVER, btnSizeControl); 
}
function btnSizeControl(e:MouseEvent):void{
  var bt:Sprite = e.currentTarget as Sprite;
  bt.mouseEnabled = false;
  if (selectedButton) {
      Tweener.addTween(selectedButton, {alpha:0.5, time:0.5});
      Tweener.addTween(selectedButton, {scaleX:1, scaleY:1, time:0.5, transition:"easeout"});
      selectedButton.mouseEnabled = true;
  }
  selectedButton = bt;
      Tweener.addTween(bt, {alpha:1, time:0.5});
      Tweener.addTween(bt, {scaleX:1.07, scaleY:1.07, time:0.5, transition:"easeout"});
}
Подскажите, плз, как воспользоваться TIMERом в случае с массивом для задержки анимации кнопок при наведении мыши. Спасибо.

Старый 28.11.2008, 22:00
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
по ROLL_OVER запускать не сами твины, а таймер:
Код AS3:
var btns:Array=[knop1_mc,knop2_mc,knop3_mc,knop4_mc];
var currBut:Sprite;
var prevBut:Sprite;
var timer:Timer=new Timer(200,1);
timer.addEventListener(TimerEvent.TIMER, startTween);
 
for (var i:uint = 0; i < btns.length; i++) {
	btns[i].addEventListener(MouseEvent.ROLL_OVER, btnSizeControl);
}
 
function btnSizeControl(e:MouseEvent):void {
	if (! timer.running) {//на случай если перевели на следующую до срабатывания таймера
		prevBut=currBut;
	}
	currBut=e.currentTarget as Sprite;
	timer.start();
 
}
 
function startTween(e:TimerEvent):void {
	if (prevBut) {
		Tweener.addTween(prevBut, {alpha:0.5,scaleX:1, scaleY:1, time:0.5, transition:"easeout"});
	}
	if (currBut) {
		Tweener.addTween(currBut, {alpha:1,scaleY:1.07, scaleX:1.07, time:0.5, transition:"easeout"});
	}
}

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

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

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


 


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


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