在sfml中使用vertexArray的正确方法是什么?

What is the correct way to use a vertexArray in sfml?

本文关键字:方法 是什么 vertexArray sfml      更新时间:2023-10-16

在做了一些研究之后,似乎使用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();
    }
}

我有形状绘图,但当我试图应用到纹理时,没有绘制。

就像这样使用:

 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);

当你构造sf::Vector2f时,你没有提供任何纹理坐标;传递一些纹理坐标作为第三个参数,比如:

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

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

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