【发布时间】:2021-05-31 00:44:46
【问题描述】:
我正在使用 C++ 在 SFML 中创建一个排序可视化应用程序。 我遇到了排序循环延迟的问题。 我制作了两个“按钮”,一个用于排序,另一个用于对向量中的数据进行洗牌,一切正常,我只是无法延迟工作,我试图将 sf::Time 与 sf::Clock 和sf::sleep,两者都失败了。
更新循环(此处添加了计时器,因此用户不能每秒点击 100 次,它真的不会是一个很酷的应用,它只是为了简单的可视化)
void App::update() {
this->pollEvents();
this->updateMousePos();
this->shuffleButton->update(this->mousePosView);
if (shuffleButton->isPressed()) {
this->time = this->clock.getElapsedTime();
if (time.asSeconds() >= 0.5) {
this->shuffle();
clock.restart();
}
}
this->bubbleSortButton->update(this->mousePosView);
if (bubbleSortButton->isPressed()) {
this->time = this->clock.getElapsedTime();
if (time.asSeconds() >= 0.5) {
this->bubbleSort();
clock.restart();
}
}
}
排序算法(条形排序正确,可视化效果非常好,显然速度太快了)
void App::bubbleSort(){
int size = this->bars.size();
do {
for (size_t i = 0; i < size - 1; i++) {
if (this->bars[i].getGlobalBounds().height > this->bars[i + 1].getGlobalBounds().height) {
int x = this->bars[i].getPosition().x;
int xS = this->bars[i + 1].getPosition().x;
this->bars[i].setPosition(xS, 700);
this->bars[i + 1].setPosition(x, 700);
std::swap(this->bars[i], this->bars[i + 1]);
}
}
--size;
} while (size > 1);
}
我以前从未要求过 SFML 中的解决方案,因此如果提供的代码不足,我深表歉意,我期待添加您需要的任何内容。
【问题讨论】:
-
timeAsSeconds() 是否返回浮点数?可能不是。你可能想要的是
getTimeAsMS() > 500 -
C++20 协程可能会有所帮助......在您可能不得不重新设计您的函数以“逐步”完成之前。然后你可能会在不同的步骤之间暂停/睡眠。
-
Devolus 它实际上是@Jarod42 我一定会查一下,尽管它与每个 MinGW 构建完全兼容吗?可能是一个愚蠢的问题,但我是真的;;你是一个新手,我在配置 SMFL 和 c++ 编译器时遇到了一些麻烦,因为它的版本不兼容
标签: c++ time timer sfml slowdown