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

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

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

Регистрация: Feb 2009
Сообщений: 23
По умолчанию Залипание ввода

Всем привет. Пишу игру, соответственно нужно шустро обрабатывать нажатие кнопок, без задержек. Стандартные обработчики срабатывают с задержкой. Поковырялся в интернетах, почитал всякое разное, в результате родился класс(сюда вставляю только часть):
Код AS3:
public class Input {
	static private var keyDown    : Array = new Array();
 
	// ** initialize
	static function initialize( stage : Stage ) {
		stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyDownHandler );
		stage.addEventListener( KeyboardEvent.KEY_UP, onKeyUpHandler );
	}
 
	// ** isKeyDown
	static function isKeyDown( key : Number ) : Boolean {
		return keyDown[ key ];
	}
 
	// ** onKeyDownHandler
	static private function onKeyDownHandler( e : KeyboardEvent ) {
		keyDown[ e.keyCode ] = true;
	}
 
	// ** onKeyUpHandler
	static private function onKeyUpHandler( e : KeyboardEvent ) {
		keyDown[ e.keyCode ] = false;
	}
}
Для инициализации вызываю Input.initialize( /*стейдж ролика*/ ), после чего в любом месте программы смотрю не нажата ли кнопка используя Input.isKeyDown. Все работает, нажатия срабатывают без задержек, отлавливается нажатие на несколько клавиш одновременно, но есть одна проблемма.

В игре WASD управление, если нажать, например, клавишу A и держать секунд 5, а потом отпустить, - персонаж продолжает двигаться некоторое время, после чего останавливается Подскажите как бы исправить?

Старый 13.05.2009, 21:08
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 2  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Ищите либо ошибку, либо проверяйте код ибо достичь этого эффекта инерции не так-то и легко и кодеры спецом думают как-бы войти в управляемый занос или дрифт???

Зацените то-же WASD и нет никаого залипания тк. я и не думал его делать
http://www.murmadillo.tut.su/html/co...n-attempt.html

Старый 13.05.2009, 21:32
Dimonte вне форума Посмотреть профиль Отправить личное сообщение для Dimonte Найти все сообщения от Dimonte
  № 3  
Ответить с цитированием
Dimonte

Регистрация: Jun 2008
Сообщений: 51
_dm, сталкивался с таким "залипанием", то бишь с задержкой обработки клавиатурных эвентов. У меня оно появлялось, когда плеер не справлялся с потоком вычислений. Проверьте реальный фреймрейт и время обработки кадра.

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

Регистрация: Sep 2002
Сообщений: 30,787
Такой класс, один в один, давным давно написали.

Старый 13.05.2009, 22:27
_dm вне форума Посмотреть профиль Отправить личное сообщение для _dm Найти все сообщения от _dm
  № 5  
Ответить с цитированием
_dm

Регистрация: Feb 2009
Сообщений: 23
Игра выдаёт примерно 22 кадра в секунду, проц грузится сильно, думаю из-за этого может возникать такой баг Походу там в очереди накапливается куча событий, которые потом обрабатываются после отпускания клавиши... как бы это вылечить? Может принудительно сбрасывать флаг нажатия каждые 2 секунды?

Старый 14.05.2009, 00:51
Dimonte вне форума Посмотреть профиль Отправить личное сообщение для Dimonte Найти все сообщения от Dimonte
  № 6  
Ответить с цитированием
Dimonte

Регистрация: Jun 2008
Сообщений: 51
И придется каждые две секунды кнопку нажимать снова? Лучше как-нибудь нагрузку снизьте, тормоза - плохо, в любом случае.

Старый 14.05.2009, 14:46
_dm вне форума Посмотреть профиль Отправить личное сообщение для _dm Найти все сообщения от _dm
  № 7  
Ответить с цитированием
_dm

Регистрация: Feb 2009
Сообщений: 23
Ясно. Вобщем вопрос закрыт, всем спасибо

Старый 15.05.2009, 02:15
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 8  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Как удалось решить?
__________________
Дело не в тебе

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

Регистрация: Feb 2009
Сообщений: 23
Никак =( Пока надеюсь на русский авось и скидываю баласт =)

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

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

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


 


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


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