如何解决如何减慢可视化算法
我正在使用 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 中要求过解决方案,因此如果没有提供足够的代码,我深表歉意,我期待添加您需要的任何内容。
解决方法
您忘记在按下按钮后将时间重置为零。
if (shuffleButton->isPressed()) {
this->time = this->clock.getElapsedTime();
if (time.asSeconds() >= 0.5) {
this->shuffle();
clock.restart();
time = 0;
}
}
另外,正如另一位用户所指出的,理想情况下,您应该逐步解决,并让算法在每个循环中暂停,如下所示:
sf::Time time = sf::milliseconds(sleepForInMiliseconds);
sf::sleep(time);
其中 sleepForInMiliseconds
是您首选的步进延迟的整数。有趣的是,我正在从事完全相同的项目,因此我也可以帮助解决任何其他问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。