2012-06-20 6 views
1

Я разрабатываю Стрельба с Qt Creator и моя проблема заключается связь с keyPressEvent функцией моей сцены:QT keyPressedEvent слишком медленно?

void Scene::keyPressEvent(QKeyEvent *event){ 
    liste_event << event->key(); 

    if (liste_event.contains(Qt::Key_Left)) { 
     vaisseau->MoveX(-1); 
    } 

    if (liste_event.contains(Qt::Key_Right)) { 
     vaisseau->MoveX(1); 
    } 
} 

собирает, но мой спрайт (vasisseau) движется очень медленно. Как я могу улучшить код, чтобы он двигался быстрее?

+1

Похоже, что вы, вероятно, хотите сохранить перемещение спрайта во время нажатия клавиши. Я бы предложил начать QTimer, который перемещает спрайт, когда он срабатывает. –

+0

Вы имеете в виду, что функция keypressevent должна вызывать QTimer? – user1312748

+0

Да, если вы хотите, чтобы спрайт продолжал двигаться до тех пор, пока ключ не будет отпущен. –

ответ

0

Ну, проблема заключается в том, что вы оставляете анимацию игры keyPressEvent, которая не запускается так часто, как хотелось бы.

Чтобы решить эту проблему, я предлагаю вам использовать традиционный подход, который включает в себя функцию draw() сцены (и ее объектов). Идея состоит в том, что эта функция вызывается каждые X миллисекунды, и рисунок будет работать независимо от нажатия клавиши или нет.

Таким образом, в этом случае, внутри keyPressEvent вы просто хранить ключ, которая была нажата, и в Scene::draw() вы реализуете логику, которая будет вызывать MoveX() с соответствующим параметром, на основе сохраненного ключа.