问题
如果用户想知道一个键被按下,使用内SFML事件轮询循环的“精确”时间精确事件计时,一个可能的方法是查询附带捆绑时间戳数据每sf::Event
。与SFML
但是我没有在文档中发现任何建议sf::Event
类中存在此类数据的内容。
问题1:此数据是否存在于sf::Event
之内。我有一个模糊的回忆,它在sfml的早期版本中或在另一个窗口工具包中可能?
问题2:如果不是,那么可以准确地测量一个键被按下多长时间?
问题3:是否有任何其他窗口工具包允许这样做?
代码
目前我做了以下内容:
double time_pressed = 0.0;
sf::Clock clock;
clock.restart();
while(window.isOpen())
{
// Timing control
const double delay_time = 1.0/100.0;
double current_delay_time = clock.restart().asSeconds();
if(current_delay_time < delay_time)
{
sf::sleep(sf::seconds(delay_time - current_delay_time));
}
sf::Event event;
while(window.pollEvent(event))
{
if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
time_pressed += current_delay_time; // !
}
}
// Other code
window.display();
}
是否有这样做的更好的或改进的办法吗?
我知道这可能与操作系统有关,因为Linux不是RTOS,我相信Windows是? (?)从操作系统自身记录按键时间戳的角度来看,它们都是“操作系统”,因为它们可以管理多个任务,所以大概是“最准确的理论上可行的方法”。如果存在的话,是否可以访问该数据?
我使用Linux,但这实际上是一个Windows项目 - 我知之甚少。