c++ 如果我要求用户输入,SFML RenderWindow会延迟弹出

y4ekin9u  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(168)

所以我试图用SFML做一个排序算法可视化工具。这一切都很好,直到我询问用户输入数组的大小以及用户希望看到它可视化的算法。当我要求用户输入时,程序在后台执行一段时间,排序开始,但我不能显示几秒钟。

  1. int main(){
  2. int Size = takeSize();
  3. int choice = takeAlgorithm();
  4. fillArray(Size);
  5. while(window.isOpen()){
  6. Event event;
  7. while (window.pollEvent(event))
  8. if(event.type == Event::Closed) window.close();
  9. if(!sorted){
  10. dispSort(0);
  11. algorithmSelector(choice);
  12. }
  13. }
  14. return 0;
  15. }

这是我的主程序。如果我设置了数组的大小和之前运行的排序算法,一切都可以完美地工作,但是如果我用takeSize()和takeAlgorithm()函数从用户那里获取输入:

  1. int takeSize(){
  2. cout << "Please enter a number between 10 and 150 for the number of elements in the array: \n";
  3. int vectorSize;
  4. while(true){
  5. cin >> vectorSize;
  6. if(vectorSize >=10 && vectorSize <=199)
  7. return vectorSize;
  8. else{
  9. cout << "Please enter a valid number between the given ranges!\n";
  10. continue;
  11. }
  12. }
  13. }
  14. int takeAlgorithm(){
  15. cout << "Please enter the corresponding number to select the sorting algorithm you want to see visualized: \n";
  16. cout << "1-) Bubble Sort\n";
  17. cout << "2-) Merge Sort\n";
  18. cout << "3-) Insertion Sort\n";
  19. cout << "4-) Selection Sort\n";
  20. cout << "5-) Gnome Sort\n";
  21. int number;
  22. cin >> number;
  23. return number;
  24. }

窗口在后台开始排序时显示较晚。注意:我在全局范围内使用这个-> RenderWindow window(VideoMode(601, 600), "Sorting Algorithm Visualizer!");,所以会出现一个空窗口,然后我在该窗口转到后台后输入输入。

ndasle7k

ndasle7k1#

问题是,除非轮询事件,否则SFML窗口不会显示,因此它不会仅仅因为您构造了sf::RenderWindow而显示。您的代码需要一段时间才能到达轮询事件的点,因为std::cin blocks SFML
您可以选择不使用std::cin,而是在GUI中使用SFML获取键盘输入,或者您可以接受在输入数组大小之前窗口不会打开。我认为后者实际上更有意义,因为如果没有一个元素数组需要排序,窗口会显示什么,这并不清楚。

相关问题