Bonjour,
J'essai d'afficher les polygones représentant la zone de collision d'une entité.
Pour ce faire, j'utilise un sf::VertextArray, avec la primitive sf::Lines.
Sur un polygones simple, un carré, je n'arrive pas a afficher un carré correct.
Tous les vertex ne s'affiche pas à la bonne position.
Est-ce que j'ai écris qqch de travers ?
Merci.
Francis.
Voici un exemple de code source :
#include "Game.h"
#include <sstream>
#include <SFML/Window.hpp>
#include <SFML/Graphics/Font.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
#include <SFML/Graphics/Text.hpp>
Game::Game(void) :
fps(0),
max(0)
{
}
Game::~Game(void)
{
}
void Game::Run()
{
sf::VertexArray vertices(sf::Lines,8);
vertices[0].position = sf::Vector2f(100, 100);
vertices[1].position = sf::Vector2f(340, 100);
vertices[2].position = sf::Vector2f(340, 100);
vertices[3].position = sf::Vector2f(340, 340);
vertices[4].position = sf::Vector2f(340, 340);
vertices[5].position = sf::Vector2f(100, 340);
vertices[6].position = sf::Vector2f(100, 340);
vertices[7].position = sf::Vector2f(100, 100);
sf::ContextSettings contextSettings;
contextSettings.depthBits = 32;
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window with OpenGL", sf::Style::Close, contextSettings);
sf::Font font;
font.loadFromFile("c:/windows/fonts/arial.ttf");
sf::Text info;
info.setFont(font);
info.setCharacterSize(12);
info.setColor(sf::Color::Yellow);
fps = 0;
max = 0;
sf::Clock clock;
int fpsCount = 0;
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
fpsCount++;
if(clock.getElapsedTime().asMilliseconds() >= 1000)
{
fps = fpsCount;
if(fps > max) max = fps;
clock.restart();
fpsCount = 0;
}
window.clear();
std::stringstream stream;
stream << fps;
stream << " Fps - ";
stream << max;
stream << " Max";
info.setString(stream.str());
window.draw(info);
window.draw(vertices);
window.display();
}
}