学校向けの基本的なテトリスゲームに取り組んでいます。初めてゲームを作るので、ゲームループを開発する方法がわかりません。
描画にはopenglを使用しています。シーンを再描画する前に一定時間待機するメイン ループを作成しますか?
以下は、基本的な (非常に高レベルの疑似コード) ゲーム ループです。
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