随机形状和运动生成不绘制形状

Random shape and movement generation not drawing shape

我最近一直在研究一个简单的 C++ 和 SFML 程序,但卡住了。基本上我想做两件事:

  1. 我想生成多个坐标随机的圆圈
  2. 我想让那些圆圈在屏幕上随机移动

我认为最好为圆圈使用矢量,这样我就可以使用 am int 来确定形状的数量。

坐标生成正确,但形状未绘制到屏幕上!

这是我的代码:

#include "SFML/Graphics.hpp"
#include <stdlib.h>
#include <iostream>

int main()
{
    srand(time(NULL));

    const int WINDOW_X = 800;
    const int WINDOW_Y = 480;

    sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "Epidemic Simulation", sf::Style::Close | sf::Style::Titlebar);

    int numPeople = 2;
    float size = 5;
    int status = 0;

    //Declare CircleShape
    std::vector<sf::CircleShape> person(size);

    //Change color depending on status
    for (int i = 0; i < numPeople; i++)
    {
        if (status == 0)
            person[i].setFillColor(sf::Color::Green);
        else if (status == 1)
            person[i].setFillColor(sf::Color::Red);
        else if (status == 2)
            person[i].setFillColor(sf::Color::Black);
        else
        {
            std::cout << ("Error: Incorrect color value");
            person[i].setFillColor(sf::Color::Green);
        }
    }

    //Generate random coordinates for each circle
    for (int i = 0; i < numPeople; i++)
    {
        int xPos = rand() % WINDOW_X - (size * 2);
        int yPos = rand() % WINDOW_Y - (size * 2);

        if (xPos < (size * 2))
            xPos = 0;

        if (yPos < (size * 2))
            yPos = 0;

        std::cout << ("X position: ") << xPos << (", Y position: ") << yPos << "\n";
    }

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear(sf::Color::White);

        //Draw circle
        for (int i = 0; i < numPeople; i++)
            window.draw(person[i]);

        window.display();
    }

    return 0;
}

知道为什么没有绘制形状吗?我怎样才能让形状随机移动?

看来您只需要进行一些更改即可。

主要的(来自diff命令的输出)是:

>     // Give the circles definite radius value and segment count:
>     for (int i = 0; i < numPeople; i++)
>     {
>         person[i].setRadius(size);
>         person[i].setPointCount(100);
>     }

还有:

    // Generate random coordinates for each circle:
    for (int i = 0; i < numPeople; i++)
    {
        int xPos = rand() % WINDOW_X - (size * 2);
        int yPos = rand() % WINDOW_Y - (size * 2);
        ... <clip> ...
        person[i].setPosition(xPos, yPos);
    }

旁注:

srand()rand() 函数是遗留 C API 的一部分。它们不打算在新的 C++ 代码中使用。建议#include <random> header 并使用C++11 API。详情见论文:n3551.pdf.