Я программирую игру в "OpenGL" и использую "Gtkmm" в качестве оконного менеджера. Я хочу использовать клавиатуру для перемещения камеры (таким образом, «кнопка ВВЕРХ» для перемещения вперед, «кнопка ВНИЗ» для перемещения назад и т. Д.)
Некоторое время назад, когда я программировал на Java, я использовал эту технику для «перемещения»:
Когда приложение получило, например, сигнал «UP-key- press », оно впоследствии установило для флага «shouldMoveForward» значение «true», а затем оно получило «UP-key- release"сигнал, он установил флаг обратно на" ложь ".
И «игровая петля» постоянно проверяется на наличие этого флага, и если это правда, она перемещает камеру вперед, в противном случае она ничего не делает.
Так что я бы хотел использовать ту же технику в "Gtkmm". Поэтому я просто переопределил эти функции моего "Gtk :: DrawingArea" :
bool Gtk::Widget::on_key_press_event(GdkEventKey* event)
bool Gtk::Widget::on_key_release_event(GdkEventKey* event)
Но проблема заключается в следующем: когда я, например, нажимаю клавишу «ВВЕРХ» и удерживаю ее в течение 5 секунд, генерируется следующая последовательность сигналов:
press ...<little time waiting>... release press release press release press release .......... press release press release
Предыдущая ситуация возникает, когда я запускаю свою игру "в Linux" .
Когда я "на Windows" , это так, как я хочу, поэтому:
press ...<little time waiting>... press press press press press .......... press press release
Похоже, это "непереносимое" решение для камеры, движущейся в Гткмм.
Так есть ли другое ( "ПОРТАТИВНОЕ" ) решение для перемещения камеры с использованием Gtkmm в качестве оконного менеджера?