c_cpp Gaffer在游戏“修复你的时间步”上的基本实现!游戏循环,使用SFML。 http://gafferongames.com/game-physics/fix-your-timestep
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp Gaffer在游戏“修复你的时间步”上的基本实现!游戏循环,使用SFML。 http://gafferongames.com/game-physics/fix-your-timestep相关的知识,希望对你有一定的参考价值。
std::tuple<int, double> fit(double total, double piece)
{
if (piece == 0)
return std::make_pair(0, 0);
int quot = static_cast<int>(total / piece);
double rem = total - quot * piece;
return std::make_pair(quot, rem);
}
int main()
{
sf::RenderWindow window(sf::VideoMode(640, 480), "Default name");
window.setFramerateLimit(60);
sf::Clock frameClock;
const double fps = 120;
const sf::Time frameQuota = sf::seconds(1 / fps);
sf::Time overtime = sf::seconds(0);
while (window.isOpen())
{
sf::Event event;
//// This is just to allow the window to be closed in the first place.
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
if (event.type == sf::Event::KeyPressed)
{
if (event.key.code == sf::Keyboard::Escape)
{
window.close();
}
}
}
sf::Time delTime(frameClock.restart());
if (delTime < frameQuota - overtime)
{
overtime += delTime;
}
else
{
auto p = fit((delTime + overtime).asSeconds(), frameQuota.asSeconds());
int framecount = std::get<0>(p);
overtime = sf::seconds(std::get<1>(p));
for(int i = 0; i < framecount; ++i) {
// LOGIC TICK HERE
}
}
{ // RENDERING
window.clear(sf::Color(200, 200, 200));
window.display();
}
}
return 0;
}
以上是关于c_cpp Gaffer在游戏“修复你的时间步”上的基本实现!游戏循环,使用SFML。 http://gafferongames.com/game-physics/fix-your-timestep的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp UVa 1292 - 战略游戏
c_cpp 【动态规划】多边形游戏【3.6】
c_cpp 多人二十一点纸牌游戏
c_cpp C ++中的Bulls and Cows游戏
c_cpp MasterMind游戏,以计算机为代码破解者。致力于我的女儿。
c_cpp 在Amaz游戏中的炉石致死率https://www.youtube.com/watch?v=clEKDpjQ7Ok