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