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

时间:2013-03-21 20:21:42

标签: c++ sfml

在做了一些研究之后,似乎在最有效的方法中使用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();
    }
}

我有形状绘图,但当我尝试应用于纹理时,没有任何绘制。

2 个答案:

答案 0 :(得分:2)

就这样使用:

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

答案 1 :(得分: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以来已经有一段时间了,所以这可能是也可能不是。)

相关问题