Bonjour,
J'ai un programme banal dans lequel je change la vue de ma
sf::RenderWindow principale. Lorsque l'utilisateur clique quelque part sur ma fenêtre, je récupère les coordonnées de la souris via
sf::Mouse::getPosition(). Sauf que celles-ci ne sont pas affectées par la vue !
C'est à dire que je quelque soit la transformation que j'applique à ma vue, les coordonnées du coin en haut à gauche retournées par
sf::Mouse::getPosition() seront toujours les même.
Y-a-t-il un moyen d'appliquer les transformations faites à ma vue aux coordonnées que je récupère ? J'ai essayer de manipuler la matrice de transformation de
sf::View sans grand succès..
#include <iostream>
#include <SFML/Graphics.hpp>
int main(int argc, char **argv)
{
sf::RenderWindow window;
sf::RectangleShape shape(sf::Vector2f(10, 50));
shape.setFillColor(sf::Color::Black);
// Create window
window.setFramerateLimit(60);
window.create(sf::VideoMode(1024, 768),
"Title",
sf::Style::Titlebar | sf::Style::Close,
sf::ContextSettings(0, 0, 8));
sf::View view(window.getDefaultView());
view.setCenter(0, 0);
window.setView(view);
// Rendering loop
while(window.isOpen()) {
// Poll event
sf::Event event;
while(window.pollEvent(event)) {
// Want to quit
if(event.type == sf::Event::Closed) {
window.close();
// Get mouse position
} else if(event.type == sf::Event::MouseButtonPressed) {
std::cout << view.getTransform().transformPoint((float) sf::Mouse::getPosition(window).x, (float) sf::Mouse::getPosition(window).y).x
<< ", " << view.getTransform().transformPoint((float) sf::Mouse::getPosition(window).x, (float) sf::Mouse::getPosition(window).y).y
<< std::endl;
}
}
// Render
window.clear(sf::Color::White);
window.draw(shape);
window.display();
}
return 0;
}
Merci !