我写了一个死亡竞赛多人“坦克”游戏,玩家可以加入服务器并运行坦克,射击等。目前我想制作围绕地图移动的机制(2D)。我尝试了一些方法,但它们并不令人满意。
现在我正在使用QTimer
它与地图上的一名玩家完美配合,但是当我加入第二名时,他们都开始滞后。
keyPressEvent方法
void MainWindow::keyPressEvent(QKeyEvent *event)
{
switch(event->key())
{
case Qt::Key_Up:
keyUp = true;
break;
case Qt::Key_Down:
keyDown = true;
break;
}
}
keyPressEvent
并且keyReleaseEvent
是相似的,而不是在发布事件中有 fekeyUp = false
声明。
移动播放器方法
void MainWindow::movePlayer()
{
if(keyUp)
ui->widget->playerList[playerID]->move(0.2);
else if(keyDown)
ui->widget->playerList[playerID]->move(-0.1);
if(keyLeft)
ui->widget->playerList[playerID]->rotate(-5);
else if(keyRight)
ui->widget->playerList[playerID]->rotate(5);
if(keyE)
ui->widget->playerList[playerID]->rotateCannon(-3);
else if(keyQ)
ui->widget->playerList[playerID]->rotateCannon(3);
}
onTimer方法(向服务器发送一条带有 tank 位置的消息)
void MainWindow::onTimer()
{
movePlayer();
QTextStream out(socket);
out << QString::number(ui->widget->playerList[playerID]->id)
+ " " + QString::number(ui->widget->playerList[playerID]->getXPos())
+ " " + QString::number(ui->widget->playerList[playerID]->getYPos())
+ " " + QString::number(ui->widget->playerList[playerID]->getRotation()) << endl;
ui->widget->updateGL();
}
如何编写/重写代码以实现平稳运行 2 个或更多坦克的目标?