Я пишу 2D-игру на Java, и у меня проблема с тем, что события ввода (мышь, клавиатура) не запускаются, когда они должны. Работает как положено в win2k & xp.
Поскольку это игра, у меня есть основной цикл, который
- Объединяет входные события (различные слушатели заполняют буферизованное состояние)
- Продвижение сцены
- Отображает сцену
- Ожидает, если необходимо, чтобы поддерживать стабильную частоту кадров (сон)
- Перестановка буферов
Визуализация сцены довольно сильно забивает java2D - он использует BufferStrategy и интенсивно использует немасштабирующий вариант drawImage (). Частота кадров на данный момент искусственно заблокирована на скорости около 60 кадров в секунду.
Кажется, что есть задержка (до нескольких секунд, иногда) между любым происходящим событием мыши или клавиатуры и JVM, подхватывающим его - изначально я думал, что это может быть поток обработки события не получает достаточно времени (несмотря на сон кадровой частоты ) - Я проверил это, добавив пользовательское событие, содержащее маркер фрейма, и ожидая его в конце фрейма, но оно срабатывает, когда ожидается (- это следует делать только после того, как все другие предыдущие события сработали, что говорит о том, что это x -Windows-to-JDK проблема, в отличие от внутренней внутри JDK?)
Что особенно странно, так это то, что его можно смягчить, если java запускается с хорошим значением +19 (поэтому более низкий приоритет ...). Также кажется, что становится хуже, если у меня более густонаселенная сцена, показывающая, что Xorg (а не java) занимает около 80% процессорного времени, и я подозреваю, что это как-то связано ...
Я также пытался поработать с приоритетами потоков, но это не имеет никакого значения ...
Я полностью озадачен этим - кто-нибудь еще видел подобное поведение, и если да, то как вы это исправили? Я лаю не на том дереве ??
Я использую 1.6.0 OpenJDK и fedora 11.
Извиняюсь за многословие, и заранее спасибо!