Обнаружение столкновений при моделировании падающего песка C ++ и SFML - PullRequest
1 голос
/ 10 июля 2020

Мне действительно нужна помощь. Я пытаюсь сделать симуляцию падающего песка и имею некоторый код basi c, но я не могу понять, как сделать обнаружение столкновений. Вот мой код на данный момент:

//SFML Include
#include <SFML/Graphics.hpp>

//Include Vectors
#include <vector>

//Main Loop
int main()
{
    //Window Init
    sf::RenderWindow window(sf::VideoMode(720, 480, 32), "Yip Yip Physics", sf::Style::Default);

    //Global Envoirmental Variables
    static float gravity = 0.25;
    static float frict = 3;

    //Particle Structures
    struct Particle
    {
        //Shape
        sf::RectangleShape rect;

        //Cell Position
        sf::Vector2f cell_pos;

        //Vel and frict
        float slide_vel = 3;
        float grv_vel = 0;

        //Init Particle (size, color and origin)
        void init()
        {
            rect.setSize(sf::Vector2f(3, 3));
            rect.setFillColor(sf::Color::Green);
            rect.setOrigin(rect.getSize());

        }

    };

    //Particle Setup
    std::vector<Particle> particles;

    //Window Loop
    while (window.isOpen())
    {
        //Update
        if (sf::Mouse::isButtonPressed(sf::Mouse::Button::Left))
        {
            //Make and Position Particle
            Particle part;
            part.rect.setPosition(sf::Vector2f(sf::Mouse::getPosition(window)));

            //Initalize the Particle and add to vector
            part.init();
            particles.push_back(part);

       
        }

        //Pixel Update
        for (auto& p : particles)
        {

            //Draw in window
            window.draw(p.rect);

        }

        //Display
        window.display();

        //Event Variable
        sf::Event event;

        //Window Event System 
        while (window.pollEvent(event))
        {
            //Close Window
            if (event.type == sf::Event::Closed)
            {
                window.close();

            }
            
        }

        //Window Clear
        window.clear(sf::Color::Black);

    }

    //Return 0
    return 0;
}

Код работает, создавая частицы, помещая их в вектор и отрисовывая их на экране, но я не знаю, где go для столкновения. Я не знаю, где искать, и был бы очень признателен за помощь или указание, где это найти. Я немного слышал о клеточных автоматах, но понятия не имею, как это сделать и лучший ли это вариант.

...