Opengl:基于时间的俄罗斯方块游戏怎么样?

时间:2013-11-05 21:49:35

标签: opengl game-loop tetris

我正在为学校制作基本的俄罗斯方块游戏。我不确定如何开发游戏循环,因为这是我第一次制作游戏。

我正在使用opengl进行绘图。在重新绘制场景之前,我是否会创建一个等待一定时间的主循环?

1 个答案:

答案 0 :(得分:1)

这是一个基本的(非常高级别的伪代码)游戏循环:

void RunGameLoop()
{
  // record the frame time and calculate the time since the last frame
  float timeTemp = time();
  float deltaTime = timeTemp - lastFrameTime;
  lastFrameTime = timeTemp;

  // iterate through all units and let them update
  unitManager->update(deltaTime);

  // iterate through all units and let them draw
  drawManager->draw();
}

将deltaTime(自上一帧以来的时间,以秒为单位)传递给unitManager-> update()的目的是,当单位更新时,它们可以将它们的移动乘以deltaTime,因此它们的值可以以每单位为单位第二

abstract class Unit
{
  public:
  abstract void update(float deltaTime);
}

FallingBlockUnit::update(float deltaTime)
{
  moveDown(fallSpeed * deltaTime);
}

绘制管理器将负责管理绘制缓冲区(我建议使用双缓冲来防止屏幕闪烁)

DrawManager::draw()
{
  // set the back buffer to a blank color
  backBuffer->clear();

  // draw all units here

  // limit the frame rate by sleeping until the next frame should be drawn
  // const float frameDuration = 1.0f / framesPerSecond;
  float sleepTime = lastDrawTime + frameDuration - time();
  sleep(sleepTime);
  lastDrawTime = time();

  // swap the back buffer to the front
  frontBuffer->draw(backBuffer);
}

对于进一步的研究,这是我的游戏编程教授写的关于2D游戏编程的书。 http://www.amazon.com/Graphics-Programming-Games-John-Pile/dp/1466501898