Rysowanie nowych obiektów w sfml przy użyciu dynamicznej tablicy

0

Witam wszystkich, nie mogę sobie poradzić z wyświetlaniem nowych obiektów, po interakcji użytkownika, u mnie po naciśnięciu klawisza A ma nastapić utworzenie kwadratu 50x50pix, wyswietlenie go w gornym rogu, a po kazdym kolejnym naciśnięciu utworzenie kolejnego kwadratu i doklejenie go z prawej strony.
Dodam że używam nadpisywania rozmiaru tablicy new, nie wiem czy to dobre rozwiązanie.
Za wszelką pomoc będę wdzięczny:)

#include <SFML/Graphics.hpp>

using namespace std;
int windX=600, windY=600;
int main()
{
    bool objectDisplay = false;
    int actuallSize = 0;
    int adposition = 0;
    sf::RenderWindow w(sf::VideoMode( windX, windY),"Whatever",sf::Style::Close);

    while (w.isOpen())
    {
        sf::Event ev;
        while (w.pollEvent(ev))
        {
            switch (ev.type)
            {
            case sf::Event::Closed:
                w.close();
                break;
            case sf::Event::KeyPressed:
                if( ev.key.code == sf::Keyboard::Escape)
                    w.close();
                if( ev.key.code == sf::Keyboard::A)
                    {
                        objectDisplay = true;
                        actuallSize++;
                    }
                break;
            }
        }
        w.clear();
        if (objectDisplay == true)
        {
            sf::RectangleShape *square = new sf::RectangleShape[actuallSize];
            for (int i=0; i < actuallSize ;i++)
            {
                square[i].setSize(sf::Vector2f(50, 50));
                square[i].setPosition(sf::Vector2f( adposition, 0));
                square[i].setFillColor(sf::Color::Green);
                w.draw(square[i]);
                adposition = adposition + 50;
            }
            delete[] square;
        }
        w.display();
    }
    return 0;
}
0

Użyj vectora.

0

Po długich walkach sam poradziłem, działający kod zostawiam dla innych, może komuś się przyda :) I podkreślam, "działający" nie znaczy najlepszy :)

#include <SFML/Graphics.hpp>
#include <iostream>
using namespace std;
int windX=600, windY=600;
int main()
{
    bool objectDisplay = false;
    int actuallSize = 0;
    float adposition = 0;
    int outloopSize = 0;
    sf::RenderWindow w(sf::VideoMode( windX, windY),"Whatever",sf::Style::Close);

    while (w.isOpen())
    {
        sf::Event ev;
        while (w.pollEvent(ev))
        {
            switch (ev.type)
            {
            case sf::Event::Closed:
                w.close();
                break;
            case sf::Event::KeyPressed:
                if( ev.key.code == sf::Keyboard::Escape)
                    w.close();
                if( ev.key.code == sf::Keyboard::A)
                    {
                        objectDisplay = true;
                        actuallSize++;
                    }
                break;
            }
        }
        outloopSize = actuallSize;
        w.clear();
        if (objectDisplay == true)
        {
            sf::RectangleShape *square = new sf::RectangleShape[outloopSize];
            for (int i=0; i < outloopSize ;i++)
            {
                square[i].setSize(sf::Vector2f(50, 50));
                square[i].setPosition(sf::Vector2f( 0+adposition, 0));
                square[i].setFillColor(sf::Color::Green);
                w.draw(square[i]);
                adposition +=50;


                cout<<i<<"  ";
            }
            adposition = 0;
            delete[] square;
        }
        w.display();
    }
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1