在经过时间后做某事C++SFML 2
Doing something after elapsed time C++ SFML 2
我在SFML中有一个时钟和计时器,它测量秒数。我正试图在经过一定的秒数(特别是4秒(后进行下一个操作。这是我的代码
#include "stdafx.h"
#include "SplashScreen1.h"
using namespace std;
void SplashScreen1::show(sf::RenderWindow & renderWindow)
{
sf::Clock clock;
sf::Time elapsed = clock.getElapsedTime();
sf::Texture splash1;
sf::SoundBuffer buffer;
sf::Sound sound;
if(!buffer.loadFromFile("sounds/splah1.wav"))
{
cout << "Articx-ER-1C: Could not find sound splah1.wav" << endl;
}
sound.setBuffer(buffer);
if(!splash1.loadFromFile("textures/splash1.png"))
{
cout << "Articx-ER-1C: Could not find texture splash1.png" << endl;
}
sf::Sprite splashSprite1(splash1);
sound.play();
renderWindow.draw(splashSprite1);
renderWindow.display();
sf::Event event;
while(true)
{
while(renderWindow.pollEvent(event))
{
//if(event.type == sf::Event::EventType::KeyPressed
if(elapsed.asSeconds() >= 4.0f)
{
//|| event.type == sf::Event::EventType::MouseButtonPressed)
//|| event.type == sf::Event::EventType::Closed
return;
}
if(event.type == sf::Event::EventType::Closed)
renderWindow.close();
}
}
}
4秒后它什么也不做。我认为我收集的时间不正确。我知道我的返回是有效的,因为我用鼠标输入尝试过,效果很好。
您的代码现在看起来很好,只是您应该在循环中更新已运行的变量(从时钟中读取(。
目前你只读了一次,并多次将静态值与4进行比较。
时间类型表示一个时间点,因此是静态的。
您的代码应该是;
...
while(renderWindow.pollEvent(event))
{
elapsed = clock.getElapsedTime();
// Rest of the loop code
...
}
浮点比较不能如此精确。CCD_ 1几乎不可能是真的。尝试>=
。
如果由于某种原因无法使SFML计时器工作,可以考虑使用ctime(time.h(。
#include <ctime>
/* ... */
time_t beginT = time(NULL), endT = time(NULL);
while(renderWindow.pollEvent(event)) {
if(difftime(endT, beginT) < 4.0f) {
endT = time(NULL);
}
else {
beginT = time(NULL);
endT = time(NULL)
/* do the after-4-seconds-thingy */
}
/* ... */
}
简单解释一下,您将endT设置为当前时间,直到它与之前设置的beginT相差整整4秒。
相关文章:
- SFML纹理像播放器
- 如何使用AngelScript注册SFML Vector2运算符
- 如何修复sfml c++代码编译错误
- SFML library: http request
- 落砂模拟碰撞检测C++和SFML
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- SFML RenderWindow打开窗口需要很长时间
- 矢量下标超出SFML游戏中的范围
- 获取 SFML 窗口的 HWND 和高可用性?
- 将 Vulkan 与 SFML 结合使用?
- SFML 文本未绘制在窗口上
- SFML 碰撞永远不会在我的系统中注册
- 使用对象数组对 SFML 进行动画处理
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 如何使用 SFML 在贪吃蛇游戏中定义游戏结束?
- 如何通过多类"Union variable" (sfml) 使用轮询事件
- 1d.exe找不到SFML文件?
- 为什么根据测量位置测量经过的时间时会有很大的不同?
- 如何获得自SFML中按下键以来经过的时间
- 在经过时间后做某事C++SFML 2