gpt4 book ai didi

c++ - keypressevent()中的qt多个键

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:11 24 4
gpt4 key购买 nike

我正在尝试在 Qt 上创建一个玩家可以沿对角线前进的游戏。所以当我按下 W 和 D 时,玩家可以转到右上角。但是,当我先按 W,然后按 D,然后松开 D 时,播放器不会朝 W 方向移动。事实上,按住 W 键甚至不会发出调用 keypressevent() 函数的信号。但是,当我按下 W,然后按下 D,然后松开 W 时,角色会朝 D 方向移动。

这是我的代码:

void my_qscroll::keyPressEvent(QKeyEvent *event)
{
switch ( event->key() )
{
case Qt::Key_W:
key[0] = 1;
break;
case Qt::Key_A:
key[1] = 1;
break;
case Qt::Key_S:
key[2] = 1;
break;
case Qt::Key_D:
key[3] = 1;
break;
}

for(int i = 0; i != 4 ; i++)
{
if(key[i] == 1)
{
this->B = i;
emit Move();
}
}
}

void my_qscroll::keyReleaseEvent(QKeyEvent *event)
{
switch ( event->key() )
{
case Qt::Key_W:
key[0] = 0;
qDebug() << "released W";
break;
case Qt::Key_A:
key[1] = 0;
qDebug() << "released A";
break;
case Qt::Key_S:
key[2] = 0;
qDebug() << "released S";
break;
case Qt::Key_D:
key[3] = 0;
qDebug() << "released D";
break;
}
}

我不确定如何解决这个问题。任何帮助我的想法或链接都会很棒。先感谢您。

最佳答案

你需要这样的东西:

void my_qscroll::keyPressEvent(QKeyEvent *event)
{
switch ( event->key() )
{
case Qt::Key_W:
key[0] = 1;
break;
case Qt::Key_A:
key[1] = 1;
break;
case Qt::Key_S:
key[2] = 1;
break;
case Qt::Key_D:
key[3] = 1;
break;
}

for(int i = 0; i != 4 ; i++)
{
if(key[i] == 1)
{
this->B = i;
emit Move();
}
}
}

void my_qscroll::keyReleaseEvent(QKeyEvent *event)
{
switch ( event->isAutoRepeat() )
{
case Qt::Key_W:
key[0] = 0;
qDebug() << "released W";
break;
case Qt::Key_A:
key[1] = 0;
qDebug() << "released A";
break;
case Qt::Key_S:
key[2] = 0;
qDebug() << "released S";
break;
case Qt::Key_D:
key[3] = 0;
qDebug() << "released D";
break;
}
}

void my_qscroll::movePlayer() {
if (key[1] && key[0]) {
left -= 2;
top -= 2;
} else if (key[3] && key[0]) {
left += 2;
top -= 2;
} else if (key[2] && key[1]) {
left -= 2;
top += 2;
} else if (key[2] && key[3]) {
left += 2;
top += 2;
} else if (key[3]) {
left += 2;
} else if (key[1]) {
left -= 2;
} else if (key[2]) {
top += 2;
} else if (key[0]) {
top -= 2;
}
}

void myCanvas::updateEnv() {
emit Move();
repaint();
}

关于c++ - keypressevent()中的qt多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23450545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com