Итак, я пытался сделать квадратную сетку из массива вершин, и это произошло - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь сделать квадратную сетку из массива вершин.Так как я не хочу кодировать каждую позицию и цвет вершины, я создал вложенный цикл for и счетчик для каждого индекса вершины.

Я перепробовал множество методов и приемов множества способов и продумал многие изэти петли работают.Самый близкий, который я получил, был этот нижний массив квадратов.

#include "SquareGrid.h"

void SquareGrid::Renderer()
{
    sf::VertexArray quads(sf::PrimitiveType::Quads, ((window.x / tiles.x) * 4) + 1);
    unsigned int counter = 0;
    for (unsigned int i = 0; i < window.x / tiles.x; i++)
    {
        for (unsigned int j = 0; j < window.y / tiles.y; j++) 
        {
            quads[counter].position = sf::Vector2f(i * tiles.x, j * tiles.y);
            quads[counter + 1].position = sf::Vector2f(i * tiles.x + tiles.x, j * tiles.y);
            quads[counter + 2].position = sf::Vector2f(i * tiles.x + tiles.x, j * tiles.y + tiles.y);
            quads[counter + 3].position = sf::Vector2f(i * tiles.x, j * tiles.y + tiles.y);

            quads[counter].color = sf::Color(rand() % 255, rand() % 255, rand() % 255);
            quads[counter + 1].color = sf::Color(rand() % 255, rand() % 255, rand() % 255);
            quads[counter + 2].color = sf::Color(rand() % 255, rand() % 255, rand() % 255);
            quads[counter + 3].color = sf::Color(rand() % 255, rand() % 255, rand() % 255);
        }
        counter += 4;
    }
    this->vertices = quads;
}

Я просто хочу квадратную сетку из окна 800 на 800, разделенного на 10 на 10 плиток

1 Ответ

0 голосов
/ 26 июня 2019

Вот код.

void SquareGrid::Renderer()
{
    sf::VertexArray array(sf::PrimitiveType::Quads, ((window / tiles.x) * (window 
/ tiles.y)) * 4);
    int counter = 0;
    for (int i = 0; i < window / tiles.y; i++) 
    {
        for (int j = 0; j < (window / tiles.x); j++) 
        {
            array[counter].position = sf::Vector2f(j * tiles.x, i * tiles.y);
            array[counter + 1].position = sf::Vector2f(j * tiles.x + tiles.x, i * 
tiles.y);
            array[counter + 2].position = sf::Vector2f(j * tiles.x + tiles.x, i * 
tiles.y + tiles.y);
            array[counter + 3].position = sf::Vector2f(j * tiles.x, i * tiles.y + 
tiles.y);

            counter += 4;
        }
    }
    for (int k = 0; k < array.getVertexCount(); k++) 
    {
        array[k].color = sf::Color(rand() % 255, rand() % 255, rand() % 255);
    }

    this->vertz = array;
}
...