Название: Нажатие клавиш Отправлено: comalex1 от Февраль 28, 2012, 20:34 Реализую движение объекта(танк в игре),таким способом:
Код C++ void MvScene::keyPressEvent(QKeyEvent * keyEvent) { switch (keyEvent->key()) { case Qt::Key_Left: tank-> rotate(-90); . . . . case Qt::Key_Down: tank->rotate(180); break; } мой танк движется но при нажатии другой кнопки останавливается,так как мне нужно реализовать ещо стрельбу ,то это непоправимо.Как мне сделать одновременное нажатие клавиш? Название: Re: Нажатие клавиш Отправлено: _OLEGator_ от Февраль 28, 2012, 20:49 1) в switch засовывать только взаимоисключаемые действия и вначале прочитать как работает switch
2) перейти на if Название: Re: Нажатие клавиш Отправлено: comalex1 от Февраль 28, 2012, 21:05 если вы имеете в виду это:
if( keyEvent->key()==Qt::Key_Left){ tank-> rotate(-90); np.setX(-40); } if( keyEvent->key()==Qt::Key_Up){ np.setY(-10); } то так не работает ,та же проблема Название: Re: Нажатие клавиш Отправлено: _OLEGator_ от Февраль 28, 2012, 21:11 а, ну все верно.
Список текущих зажатых кнопок ограничен Код
А так, если я не ошибаюсь, Qt генерирует только последнюю нажатую кнопку. Можно посмотреть что выдает Код
Название: Re: Нажатие клавиш Отправлено: Kurles от Февраль 28, 2012, 21:13 Обработка одновременного нажатия клавиш на клаве (http://www.prog.org.ru/topic_14857_0.html).
Название: Re: Нажатие клавиш Отправлено: comalex1 от Февраль 28, 2012, 21:51 чесно говоря прочитав это http://www.prog.org.ru/topic_14857_0.html,я так и не понял как мне решить проблему
Название: Re: Нажатие клавиш Отправлено: Kurles от Февраль 28, 2012, 23:33 Навскидку примерно так:
main.cpp Код
mainwindow.h Код
mainwindow.cpp Код
Название: Re: Нажатие клавиш Отправлено: comalex1 от Февраль 29, 2012, 14:51 Огромное спасиба,за ваш труд!!!!!Но вы бы не могли объяснить как работает даная программа,в часности не пойму даный код
Код: event->type() == QEvent::KeyPress ? b = true : b = false; Название: Re: Нажатие клавиш Отправлено: Kurles от Февраль 29, 2012, 15:20 Огромное спасиба,за ваш труд!!!!!Но вы бы не могли объяснить как работает даная программа,в часности не пойму даный код Та строчка аналогичнаКод: event->type() == QEvent::KeyPress ? b = true : b = false; Код То есть если событие QEvent::KeyPress, то разрешаем движение/стрельбу, иначе (событие QEvent::KeyRelease) запрещаем. Если тебе надо, что бы объект продолжал движение и после отпускания кнопок - просто не обрабатывай событие QEvent::KeyRelease для кнопок движения, а в обработчике QEvent::KeyPress назначай значение false всем переменным движения, кроме последнего. Плохой из меня учитель, но как мог :) Название: Re: Нажатие клавиш Отправлено: kambala от Февраль 29, 2012, 15:36 намного понятнее эта строчка будет выглядеть как
Код
Название: Re: Нажатие клавиш Отправлено: comalex1 от Февраль 29, 2012, 23:34 Спасибо всем за ответы ,буду розбиратся
|