我正在与qt创作者一起开发射击游戏,而我的问题是与场景的keyPressEvent功能的链接:

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)移动得非常缓慢。如何改善代码以使其运行更快?

最佳答案

好吧,问题在于您将游戏的动画留给了keyPressEvent,而触发的次数却没有您想要的那么频繁。

为了解决此问题,我建议您使用传统方法,该方法涉及具有draw()场景(及其对象)的功能。这个想法是每隔X毫秒调用一次此函数,并且图形将独立于是否按下某个键而工作。

因此,在这种情况下,只需在keyPressEvent内部存储所按下的键,然后在Scene::draw()中实现基于存储的键使用适当的参数调用MoveX()的逻辑。

09-27 11:02