0

在做了一些研究之后,似乎使用 vertexArrays 以最有效的方式一次将许多精灵绘制到屏幕上,但我正在努力如何做到这一点。我尝试使用 sfml 论坛,但我看到的每个示例都来自过时的代码,到目前为止我有这个。

int main() 
{
    sf::VertexArray lines(sf::LinesStrip, 4);
    lines.append(sf::Vertex(sf::Vector2f(0, 0),sf::Vector2f(0, 0)));
    lines.append(sf::Vector2f(0, 50));
    lines.append(sf::Vector2f(250, 50));
    lines.append(sf::Vector2f(250, 0));

    sf::Texture text;
    text.loadFromFile("Content/StartGame.png");

    sf::RenderStates rend(&text);

    sf::RenderWindow App(sf::VideoMode(800, 600, 32), "SFML Graphics");

    // Start game loop
    while (App.isOpen())
    {
        // Process events
        sf::Event Event;
        while (App.pollEvent(Event))
        {
            // Close window : exit
            if (Event.type == sf::Event::Closed)
                App.close();
        }
        App.clear();
        App.draw(lines, &text);
        App.display();
    }
}

我有形状图,但是当我尝试将它应用到纹理时,什么也没有画出来。

4

2 回答 2

3

像这样使用:

 sf::VertexArray lines(sf::LinesStrip, 4);
 lines[0].position = sf::Vector2f(10, 0);
 lines[1].position = sf::Vector2f(20, 0);
 lines[2].position = sf::Vector2f(30, 5);
 lines[3].position = sf::Vector2f(40, 2);

 window.draw(lines);
于 2013-03-21T21:03:46.053 回答
2

构建 sf::Vector2f; 时不提供任何纹理坐标;传入一些纹理坐标作为第三个参数,例如:

lines.append(sf::Vertex(sf::Vector2f(0, 0),sf::Vector2f(0, 0), sf::Vector2f(0,0)));

纹理坐标应该类似于0,00,11,01,1

您可能还必须将形状类型更改为sf::Quads(我使用 SFML 已经有一段时间了,所以这可能是也可能不是真的)。

于 2013-03-21T21:09:54.297 回答