Russian Qt Forum

Qt => Qt Quick => Тема начата: Alex Custov от Октябрь 14, 2014, 16:01



Название: Отключить задержку автоповтора клавиш
Отправлено: Alex Custov от Октябрь 14, 2014, 16:01
Если я в реальном времени двигаю по сцене предметы с помощью клавиатуры, и если я зажму клавишу, то перед её автоповтором есть задержка, что создаёт лаг. Как это убрать? Как решение можно делать постоянный poll нажатых клавиш, но считаю это слишком затратным.


Название: Re: Отключить задержку автоповтора клавиш
Отправлено: Bepec от Октябрь 14, 2014, 18:47
Это вопрос к операционной системе. Именно она ставит автозадержку. Настраивается платформозависимо.


Название: Re: Отключить задержку автоповтора клавиш
Отправлено: Alex Custov от Октябрь 14, 2014, 19:01
Это вопрос к операционной системе. Именно она ставит автозадержку. Настраивается платформозависимо.

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


Название: Re: Отключить задержку автоповтора клавиш
Отправлено: Igors от Октябрь 14, 2014, 20:13
Если я в реальном времени двигаю по сцене предметы с помощью клавиатуры, и если я зажму клавишу, то перед её автоповтором есть задержка, что создаёт лаг. Как это убрать? Как решение можно делать постоянный poll нажатых клавиш, но считаю это слишком затратным.
Не знаю что здесь poll, может простенько по таймеру и там проверять клавишу


Название: Re: Отключить задержку автоповтора клавиш
Отправлено: Bepec от Октябрь 14, 2014, 21:01
А движок игры сам отлавливает состояния клавиш каждый тик. Что равнозначно постоянному опросу клавиатуры.


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


Название: Re: Отключить задержку автоповтора клавиш
Отправлено: Alex Custov от Октябрь 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.


Название: Re: Отключить задержку автоповтора клавиш
Отправлено: Отражение луны от Октябрь 15, 2014, 02:59
не понимаю как это решит проблему с задержкой перед автоповтором (которую нужно полностью убрать). У меня уже используется Keys.onPressed.
Если ты можешь отловить момент нажатия клавиши, то можешь уже начать двигать объект по сцене с нужной тебе скоростью, и остановить объект, когда клавиша отпущена.
Может, стоит описать задачу более подробно?


Название: Re: Отключить задержку автоповтора клавиш
Отправлено: Alex Custov от Октябрь 21, 2014, 20:41
Если ты можешь отловить момент нажатия клавиши, то можешь уже начать двигать объект по сцене с нужной тебе скоростью, и остановить объект, когда клавиша отпущена.

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

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

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

В сущности, я решил остановится на бесконечном поллинге, других вариантов не вижу.


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


Название: Re: Отключить задержку автоповтора клавиш
Отправлено: Bepec от Октябрь 21, 2014, 22:18
толчками они движутся, увы. Правда красивая анимация и скорость отрисовки прячут всё :)


Название: Re: Отключить задержку автоповтора клавиш
Отправлено: Igors от Октябрь 22, 2014, 08:43
В сущности, я решил остановится на бесконечном поллинге, других вариантов не вижу.
Все-таки чем не устраивает просто по таймеру?


Название: Re: Отключить задержку автоповтора клавиш
Отправлено: Bepec от Октябрь 22, 2014, 10:16
Это и есть поллинг) Один из его вариантов :)