繁体   English   中英

为什么矩形/条形不相互交换?

[英]Why are the rectangles/bars not swapping with each other?

我正在写一个冒泡排序可视化工具。 但我似乎无法弄清楚如何交换矩形/条形。

#include<iostream>
#include<SFML/Graphics.hpp>
#include<cstdlib>
#include<ctime>
#include<chrono>
#include<thread>
int main()
{
    srand(time(NULL));
    sf::RenderWindow window(sf::VideoMode(798, 400), "Yoo", sf::Style::Default);
    sf::RectangleShape *rec=new sf::RectangleShape[133];
    for (int i = 0; i < 133; i++)
    {
        int num = rand() % 400;
        rec[i].setFillColor(sf::Color::Red);
        rec[i].setSize(sf::Vector2f(4.0f, static_cast<float>(num)));
        rec[i].setPosition(sf::Vector2f(static_cast<float>(i * 6), 400-num));
    }
    sf::Event ev;
    while (window.isOpen())
    {
        int i = rand() % 133;
        int j = rand() % 133;
        while (window.pollEvent(ev))
        {
            if (ev.type == sf::Event::Closed())
            {
                window.close();
            }
            
        }
                window.clear(sf::Color::White);
                rec[i].setFillColor(sf::Color::Blue);
                rec[j].setFillColor(sf::Color::Green);
                sf::Vector2f tmp = rec[i].getPosition();
                sf::Vector2f size = rec[i].getSize();
                rec[i].setPosition(rec[j].getPosition());
                rec[i].setSize(rec[j].getSize());
                rec[j].setSize(size);
                rec[j].setPosition(tmp);
        for (int i = 0; i < 133; i++)
        {
                window.draw(rec[i]);
        }
        rec[i].setFillColor(sf::Color::Red);
        rec[j].setFillColor(sf::Color::Red);
        window.display();
        std::this_thread::sleep_for(std::chrono::milliseconds(2000));
    }
    delete[] rec;
}

这段代码有什么问题? 我已经尝试使用 std::swap 进行正常交换来交换矩形数组。 它没有用。 所以,我想我应该交换 position 和大小。 它也不起作用。 但如图所示,我可以看到 colors 蓝色和绿色正确互换。

我测试了你的程序。 你的目标是画一个绿色条和一个蓝色条并交换它们? 当您绘制矩形时,您会在显示 window 之前交换它们。因此您看不到它们交换。 如果你愿意,你必须在交换它们之前绘制你的矩形并显示你的 window。

        window.clear(sf::Color::White);
        rec[i].setFillColor(sf::Color::Blue);
        rec[j].setFillColor(sf::Color::Green);
        for (int i = 0; i < 133; i++)
        {
            window.draw(rec[i]);
        }
        window.display(); // display them before swap.
        std::this_thread::sleep_for(std::chrono::milliseconds(2000));

        window.clear(sf::Color::White);
        sf::Vector2f tmp = rec[i].getPosition();
        sf::Vector2f size = rec[i].getSize();
        rec[i].setPosition(rec[j].getPosition());
        rec[i].setSize(rec[j].getSize());
        rec[j].setSize(size);
        rec[j].setPosition(tmp);
        for (int i = 0; i < 133; i++)
        {
            window.draw(rec[i]);
        }
        rec[i].setFillColor(sf::Color::Red);
        rec[j].setFillColor(sf::Color::Red);
        window.display(); // display them again
        std::this_thread::sleep_for(std::chrono::milliseconds(2000));

像这样的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM