Не работает код для динамического создания инстанций шаров на экране sfml c++

Рейтинг: 0Ответов: 0Опубликовано: 18.07.2023

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

Funcs.h

#include <SFML/Graphics.hpp>

int getFps()
{
    static sf::Clock clock;
    static int frameCount = 0;
    frameCount++;
    sf::Time deltaTime = clock.restart();
    float fps = frameCount / deltaTime.asSeconds();
    frameCount = 0;
    return static_cast<int>(fps);
}

sf::Vector2f getTouchPos(unsigned const int idx, sf::RenderWindow& window)
{
    sf::Vector2i rpos{ sf::Touch::getPosition(idx, window) };
        sf::Vector2f pos = window.mapPixelToCoords(rpos);
        return pos;
}
template<typename T>
void createPlanks(T&pls, std::vector<T*>& planksList, sf::Vector2f& pos, int radius)
{
    T* newPlanks = new T; // Создаем новый экземпляр класса Planks динамически
    planksList.push_back(newPlanks);
    
}


Main.cpp

#include <SFML/Graphics.hpp>
#include <vector>
#include <cmath>
#include "../include/Funcs.h"

sf::CircleShape shape(30, 30);

class ex1
{
public:
    sf::Vector2f epos;
    sf::RectangleShape rec;
    void draw(sf::RenderWindow& window1)
    {
        window1.draw(rec);
    }
    void scale()
    {
        rec.setScale(10, 10);
    }
};



int main()
{
    ex1 pls;
    sf::Font font;
    if (!font.loadFromFile("resources/fonts/font.ttf")) // Загрузка шрифта
    {
        return 1;
    }

    sf::Text objs("", font, 20);
    sf::Text fpsT("", font, 20);
    fpsT.setPosition(10, 30);
    objs.setPosition(110, 30);
    int mode = 1;
    srand(time(NULL));
    std::vector<ex1*> planksList; // Создаем вектор указателей на экземпляры класса ex1
    sf::CircleShape destroy(30, 30);
    destroy.setFillColor(sf::Color::Blue);

    sf::RenderWindow window(sf::VideoMode(360, 800), "Dynamic Instance");
    while (window.isOpen())
    {
        fpsT.setString(std::to_string(getFps()));

        for (ex1* instance : planksList)
        {
            if (instance != nullptr)
            {
                objs.setString("Objects count: " + std::to_string(planksList.size()));
            }
        }
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
            else if (event.type == sf::Event::TouchBegan)
            {
                
                sf::Vector2f pos = getTouchPos(0, window);
                createPlanks(pls, planksList, pos, 10);
                
                

            }
        }

        for (ex1* instance : planksList)
        {
            
            instance->rec.setPosition(getTouchPos(0, window));
            instance->rec.setScale(10, 10);
            pls.draw(window);
            
        }

        window.draw(fpsT);
    }
    return 0;
}

Ответы

Ответов пока нет.