Russian Qt Forum
Ноябрь 27, 2024, 04:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отключить задержку автоповтора клавиш  (Прочитано 8010 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« : Октябрь 14, 2014, 16:01 »

Если я в реальном времени двигаю по сцене предметы с помощью клавиатуры, и если я зажму клавишу, то перед её автоповтором есть задержка, что создаёт лаг. Как это убрать? Как решение можно делать постоянный poll нажатых клавиш, но считаю это слишком затратным.
Записан
Bepec
Гость
« Ответ #1 : Октябрь 14, 2014, 18:47 »

Это вопрос к операционной системе. Именно она ставит автозадержку. Настраивается платформозависимо.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Октябрь 14, 2014, 19:01 »

Это вопрос к операционной системе. Именно она ставит автозадержку. Настраивается платформозависимо.

Если она (и только она) ставит автозадержку, то как игры её игнорируют? Значит задержка управляется, если только не используется бесконечный поллинг в самой игре.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Октябрь 14, 2014, 20:13 »

Если я в реальном времени двигаю по сцене предметы с помощью клавиатуры, и если я зажму клавишу, то перед её автоповтором есть задержка, что создаёт лаг. Как это убрать? Как решение можно делать постоянный poll нажатых клавиш, но считаю это слишком затратным.
Не знаю что здесь poll, может простенько по таймеру и там проверять клавишу
Записан
Bepec
Гость
« Ответ #4 : Октябрь 14, 2014, 21:01 »

А движок игры сам отлавливает состояния клавиш каждый тик. Что равнозначно постоянному опросу клавиатуры.
Записан
Отражение луны
Гость
« Ответ #5 : Октябрь 14, 2014, 22:24 »

Тебе не нужен автоповтор, тебе нужно ловить состояние нажатия клавиши. Иначе говоря, тебе нужны pressed(KeyEvent event) и released(KeyEvent event) из http://qt-project.org/doc/qt-5/qml-qtquick-keys.html#pressed-signal
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Октябрь 14, 2014, 23:44 »

Тебе не нужен автоповтор, тебе нужно ловить состояние нажатия клавиши. Иначе говоря, тебе нужны pressed(KeyEvent event) и released(KeyEvent event) из http://qt-project.org/doc/qt-5/qml-qtquick-keys.html#pressed-signal

не понимаю как это решит проблему с задержкой перед автоповтором (которую нужно полностью убрать). У меня уже используется Keys.onPressed.
Записан
Отражение луны
Гость
« Ответ #7 : Октябрь 15, 2014, 02:59 »

не понимаю как это решит проблему с задержкой перед автоповтором (которую нужно полностью убрать). У меня уже используется Keys.onPressed.
Если ты можешь отловить момент нажатия клавиши, то можешь уже начать двигать объект по сцене с нужной тебе скоростью, и остановить объект, когда клавиша отпущена.
Может, стоит описать задачу более подробно?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #8 : Октябрь 21, 2014, 20:41 »

Если ты можешь отловить момент нажатия клавиши, то можешь уже начать двигать объект по сцене с нужной тебе скоростью, и остановить объект, когда клавиша отпущена.

Это не подходит по банальной причине того, что события "key released" могут теряться. Например, во время переключения окна с помощью Alt+Tab.

Может, стоит описать задачу более подробно?

При нажатии на клавишу персонаж сдвигается на 5 точек. При зажатии клавиши он постоянно двигается, всё как обычно в играх. При этом возникает лаг автоповтора клавиши.

В сущности, я решил остановится на бесконечном поллинге, других вариантов не вижу.
Записан
Отражение луны
Гость
« Ответ #9 : Октябрь 21, 2014, 22:17 »

В играх обычно объекты движутся равномерно, а не толчками. В qml для этого уместно использовать анимацию. Key released действительно могут теряться, если приложение теряет фокус ввода, и документация говорит, что это единственный случай, когда это может происходить. Чтобы ловить потерю приложением фокуса, полагаю, нужен http://qt-project.org/doc/qt-5/qquickwindow.html
Записан
Bepec
Гость
« Ответ #10 : Октябрь 21, 2014, 22:18 »

толчками они движутся, увы. Правда красивая анимация и скорость отрисовки прячут всё Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Октябрь 22, 2014, 08:43 »

В сущности, я решил остановится на бесконечном поллинге, других вариантов не вижу.
Все-таки чем не устраивает просто по таймеру?
Записан
Bepec
Гость
« Ответ #12 : Октябрь 22, 2014, 10:16 »

Это и есть поллинг) Один из его вариантов Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.148 секунд. Запросов: 23.