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

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

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

Регистрация: Oct 2004
Сообщений: 10
По умолчанию Есть ли аналог onKeyPress? (не onKeyDown и не onKeyUp)

Нужен обработчик, реагирующий на событие, именуемое обычно onKeyPress, обозначающее, что клавиша была нажата и отпущена. onKeyDown и onKeyUp не подходят, т.к. сообщают только о части события. Как лучше отследить именно связку событий нажатия и отпускания клавиши?
Для чего это нужно, конкретная задача.
В мувике происходят какие-то действия в цикле. По нажатию SPACE ставится пауза. По повторному нажатию пауза снимается. Если мы будем обрабатывать onKeyPress или onKeyUp (или isDown проверять), то нажание клавиши может перехватиться более одного раза, например два раза. Пауза тогда сразу снимется, это плохо.
Пример кода:
Код AS1/AS2:
PAUSE=false;
myListener = new Object();
myListener.onKeyDown = function () {
	if (Key.isDown(Key.SPACE)) {
		PAUSE=!PAUSE;
		trace('PAUSE :'+PAUSE);
	}
}
Key.addListener(myListener);
Результат - если нажать и держать SPACE, то сообщение выведется не один раз, а много! Почему, кстати, функция вызывается несколько раз, событие ведь только одно было - нажатие?
Итог - нужно событие, которое вызывается именно по действию нажал-отпустил. Как такое сделать?

P.S. Flash 8.

Старый 24.12.2008, 23:26
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Событие onKeyDown генерируется системой с частотой, установленной в соответствующих настройках. Флэш-плеер может его только "ловить", повлиять на частоту он не может. А вот событие onKeyUp, происходит единожды, что вполне естественно.
Код:
PAUSE = false;
function invert() {
	PAUSE = !PAUSE;
	trace('PAUSE :'+PAUSE);
}
onKeyDown = function () {
	if (Key.isDown(Key.SPACE)) {
		onKeyUp = invert;
	}
};
Key.addListener(this);


Последний раз редактировалось alexcon314; 24.12.2008 в 23:28.
Старый 24.12.2008, 23:40
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 3  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Ну почему всегда делают листенером левый объект? Текущего this не хватет?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 25.12.2008, 00:45
Mnilionic вне форума Посмотреть профиль Отправить личное сообщение для Mnilionic Найти все сообщения от Mnilionic
  № 4  
Ответить с цитированием
Mnilionic
 
Аватар для Mnilionic

Регистрация: Aug 2005
Адрес: я из Ленинграда
Сообщений: 1,082
Отправить сообщение для Mnilionic с помощью ICQ
или так
Код AS1/AS2:
PAUSE = true;
function invert() {
	PAUSE = !PAUSE;
	trace('PAUSE :'+PAUSE);
}
function key_up(){
	invert();
	onKeyDown = key_down;
}
function key_down(){
	if (Key.isDown(Key.SPACE)) {
		delete onKeyDown;
		onKeyUp = key_up;
	}
}
Key.addListener(this);
key_up();

Старый 25.12.2008, 01:09
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от dimarik Посмотреть сообщение
Ну почему всегда делают листенером левый объект? Текущего this не хватет?
А это всё результат изучения хелпа и нежелания думать головой в последствии.

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

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

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


 


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


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