在做了一些研究之后,似乎在最有效的方法中使用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();
}
}
我有形状绘图,但当我尝试应用于纹理时,没有任何绘制。
答案 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,0
,0,1
,1,0
和1,1
。
您可能还需要将形状类型更改为sf::Quads
(自从我使用SFML以来已经有一段时间了,所以这可能是也可能不是。)