QTimer replacement?
QTimer replacement?
本文关键字:replacement QTimer 更新时间:2023-10-16
im目前正在尝试制作一个贪吃蛇游戏以了解有关QT和C ++的更多信息,但是当我尝试自动移动QGraphicsRectItem Item时,它会改变速度。我的问题有没有更好的方法可以在没有QTimer的情况下自动移动项目?
这是我的按键事件方法:
if(event->key()==Qt::Key_Left)
{
setPos(x()-10,y());
left=true;
}
else if(event->key()==Qt::Key_Right)
{
setPos(x()+10,y());
right=true;
}
if(event->key()==Qt::Key_Up)
{
setPos(x(),y()-10);
up=true;
}
if(event->key()==Qt::Key_Down)
{
setPos(x(),y()+10);
down=true;
}
QTimer* timer=new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(move()));
timer->start(10000);}
这是 移动 方法:
void Player::move()
{
if(up==true)
{
setPos(x(),y()-10);
}
else if(down==true)
{
setPos(x(),y()+10);
}
else if(right==true)
{
setPos(x()+10,y());
}
else if(left==true)
{
setPos(x()-10,y());
}
}
您在
PressKeyEvent()
中创建的QTimer
是动态分配。它一直存在,直到你明确销毁它。
您每次按键都会启动一个新QTimer
,但不会破坏以前创建的QTimer
。因此,每次按键(在理想世界中(蛇的速度大约会翻倍。
正确的设计是只有一个QTimer
。仅建立一种连接。
Constructor()
{
QTimer* timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(move()));
timer->start(10000);
}
PressKeyEvent(){
if(event->key()==Qt::Key_Left)
{
setPos(x()-10,y());
left=true;
}
else if(event->key()==Qt::Key_Right)
{
setPos(x()+10,y());
right=true;
}
if(event->key()==Qt::Key_Up)
{
setPos(x(),y()-10);
up=true;
}
if(event->key()==Qt::Key_Down)
{
setPos(x(),y()+10);
down=true;
}
}
void Player::move()
{
if(up==true)
{
setPos(x(),y()-10);
}
else if(down==true)
{
setPos(x(),y()+10);
}
else if(right==true)
{
setPos(x()+10,y());
}
else if(left==true)
{
setPos(x()-10,y());
}
}
另一种方法
如果您希望游戏在第一次按键时启动,则可以初始化类中的bool
并在代码中设置条件:
PressKeyEvent()
{
if(event->key()==Qt::Key_Left)
{
setPos(x()-10,y());
left=true;
}
else if(event->key()==Qt::Key_Right)
{
setPos(x()+10,y());
right=true;
}
if(event->key()==Qt::Key_Up)
{
setPos(x(),y()-10);
up=true;
}
if(event->key()==Qt::Key_Down)
{
setPos(x(),y()+10);
down=true;
}
if (!gameStarted){
gameStarted = true;
QTimer* timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(move()));
timer->start(10000);
}
}
相关文章:
- 如何从其他类n个Qt C++调用QTimer?
- 如何完全停止QTimer
- QTimer 超时不会在单元测试中触发
- 使用 QTimer、QThread 和进度条
- 在C++中使用std或boost库的Qtimer等价物是什么
- QTimer::singleShot 仅在间隔为 0 时调用 lambda
- 如何在QtConcurrent::run中启动QTimer或为什么QVector<QTimer*>不起作用
- 何时使用多个函数调用和 QTimer 调用析构函数?
- 使用 std::bind 将 QTimer::singleShot 传递给 std::async
- QTimer isActive 返回 true,但 remainingTime 返回 -1
- 让 QtConcurrent 中的 QTimer 正常工作
- QTimer timeout()方法不再在代码重组后启动
- CHAR_BIT replacement
- QTimer 在传递变量时不会启动
- 在插槽中停止QTIMER
- 使用 QTimer 对包含 5 张图像的幻灯片进行计时
- 另一个应用程序用 c++ 在 Windows 上的线程中破坏 QTimer
- QTimer 线程的方法 'isActive()' 是安全的吗?
- 将数据从 JavaScript 发送到 C++,超过 127 的字节值将替换为 "replacement character"
- QTimer replacement?