0

学校向けの基本的なテトリスゲームに取り組んでいます。初めてゲームを作るので、ゲームループを開発する方法がわかりません。

描画にはopenglを使用しています。シーンを再描画する前に一定時間待機するメイン ループを作成しますか?

4

1 に答える 1

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();
}

unitManager->update() に deltaTime (最後のフレームからの時間 (秒単位)) を渡す目的は、ユニットが更新されているときに、その動きを deltaTime で乗算して、その値を 1 秒あたりのユニット数にすることができるようにするためです。

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

于 2013-11-05T22:03:17.663 に答える