Пытаетесь нарисовать прямоугольники, хранящиеся в массиве, но появляется только один прямоугольник? - PullRequest
0 голосов
/ 09 октября 2019

Мой код здесь:

Как указано выше, я пытаюсь нарисовать серию полос по экрану с различными позициями х и храню их в массивах. Кажется, что код рисует только 1 прямоугольник, хотя я проверил, и каждый столбец имеет свою позицию x, так что я уверен, что проблема в том, как я рисую объекты, но он кажется правильным. Я также создал аналогичную программу с векторами, использующими тот же цикл для рисования, но с .at (i), который вместо этого работает, но это странным образом не работает.

Я пытался выяснить это дляпока я устал, поэтому, пожалуйста, помогите, укажите мои ошибки ... и т.д ...

#include <SFML/Graphics.hpp>


int main()
{
    sf::RenderWindow window(sf::VideoMode(640, 640), "Square", sf::Style::Close | sf::Style::Resize);
    sf::RectangleShape bar[64] = {sf::RectangleShape(sf::Vector2f( (window.getSize().x)/64.0f ,100.0f))};
// creates 64 bars of equal width 

    for (int i = 0; i < 64; i++) 
    {
        bar[i].setFillColor(sf::Color(0, 0, 255, 255));
        bar[i].setPosition( 10*i , (window.getSize().y)/2);
// sets bars x position to shift over for every bar
    }
    bar[3].setPosition(600, 300);
    // just a test doesn't render even though it should
    while (window.isOpen())
    {
//////////////////////////////////////////////////
        window.clear(sf::Color(130, 130, 150, 255));
        for (int i = 0; i < 64; i++)
        {
            window.draw(bar[i]);
        }
        window.display();
/////////////////////////////////////////////////
    }```



I cut out the rest of the code as the rest works and really has nothing to do with the code for simplicity sake
I want it to render out rectangles across the screen but it only displays one and I can't figure out why?



1 Ответ

0 голосов
/ 09 октября 2019

sf::RectangleShape имеет ctor по умолчанию:

sf::RectangleShape::RectangleShape  (   const Vector2f &    size = Vector2f(0, 0)   )   

Вы определили размер прямоугольника только для первого, остальные 63 имеют размер по умолчанию (0,0).

Вы можете копировать / вставлятьВаше прямое определение в необработанном массиве, или используйте std::vector и вызовите ctor, который принимает значение и количество элементов:

std::vector<sf::RectangleShape> bars( 64, // num of elems 
      sf::RectangleShape( sf::Vector2f(window.getSize().x/64.0f ,100.0f) ) );

Другое решение состоит в том, чтобы вызывать setSize в каждой итерации цикла (так же, как с setFillColor, setPosition и т. Д.).

...