2013-03-21 57 views
0

在做了一些研究之后,似乎将VertexArrays用于一次将很多精灵画到屏幕上的最高效方法,但我正在努力如何去做。我尝试过使用sfml论坛,但我见过的每个例子都来自过时的代码,至今为止我都有。在sfml中使用vertexArray的正确方法是什么?

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

只需使用这样的:

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

纹理如何应用呢? – user1725794 2013-03-21 22:23:48

+1

顶点类具有类成员texCoords,您可以使用它指定纹理线[0] .texCoords = sf :: Vector2f(x,y);' – Fouf 2013-03-27 13:02:34

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以来已经有一段时间了,所以这可能会也可能不会)。

+0

'代码' \t sf :: VertexArray lines(sf :: Quads,4); (sf :: Vertex(sf :: Vector2f(0,0),sf :: Vector2f(0,0))); (sf :: Vertex(sf :: Vector2f(0,50),sf :: Vector2f(0,50))); (sf :: Vertex(sf :: Vector2f(250,50),sf :: Vector2f(250,50))); (sf :: Vertex(sf :: Vector2f(250,0),sf :: Vector2f(250,0))); 应用了一些常识,并设法让它工作。现在学习如何应用这些代码来使事情更有效。 – user1725794 2013-03-21 22:34:48

相关问题