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

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

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

int main(){

    int Size = takeSize();
    int choice = takeAlgorithm();
    fillArray(Size);

    while(window.isOpen()){

        Event event;

        while (window.pollEvent(event))
            if(event.type == Event::Closed) window.close();    

        if(!sorted){
            dispSort(0);
            algorithmSelector(choice);
        }

    }
    return 0;
}

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

int takeSize(){

    cout << "Please enter a number between 10 and 150 for the number of elements in the array: \n";
    int vectorSize;
    while(true){
        cin >> vectorSize;
        if(vectorSize >=10 && vectorSize <=199)
            return vectorSize;
        else{
            cout << "Please enter a valid number between the given ranges!\n";
            continue;
        }
    }
}

int takeAlgorithm(){

    cout << "Please enter the corresponding number to select the sorting algorithm you want to see visualized: \n";
    cout << "1-) Bubble Sort\n";
    cout << "2-) Merge Sort\n";
    cout << "3-) Insertion Sort\n";
    cout << "4-) Selection Sort\n";
    cout << "5-) Gnome Sort\n";

    int number;
    cin >> number;
    return number;

}

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

ndasle7k

ndasle7k1#

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

相关问题