[SFML] Anormalny rezultat czytania pozycji myszy
Ostatnio zmodyfikowano 2017-07-29 08:07
PL_Andrev Temat założony przez niniejszego użytkownika |
[SFML] Anormalny rezultat czytania pozycji myszy » 2017-07-28 20:55:14 Witam, Napisałem kod przesunięcia obiektów wraz z ruchem myszy, jednak efektem jest "wyskok" obiektów poza obszar rysowania. Testując możliwe błędy zwróciłem uwagę, że współrzędna Y jest nieprawidłowo odczytywana - nie mam pojęcia dlaczego. Program jest zbudowany w ten sposób, iż parametry punktów ładowane są do tablicy <vector>. Przy kliknięciu myszą odczytywane są współrzędne punktu kliknięcia, przy ruchu odczytywane są współrzędne "bieżące" myszy. Punkt jest przesuwany o różnicę obu pomiarów. W dużym skrócie program przesunięcia punktu wygląda następująco: #include <iostream> #include <SFML/Graphics.hpp> #include <cmath> #include <fstream> #include <sstream>
using namespace std; using namespace sf;
int main() { vector < int > x_array, y_array; x_array.push_back( 100 ); y_array.push_back( 100 ); RenderWindow win( VideoMode( 800, 800 ), L"test", sf::Style::Default ); Font font; font.loadFromFile( "arial.ttf" ); int x_old = 0, y_old = 0; int x_new = 0, y_new = 0; bool moving = false; while( win.isOpen() ) { win.clear( Color::Black ); Event e; while( win.pollEvent( e ) ) { switch( e.type ) { case Event::Closed: win.close(); break; case sf::Event::MouseButtonPressed: if( e.mouseButton.button == 0 ) { moving = true; x_old = e.mouseButton.x; y_old = e.mouseButton.y; } break; case sf::Event::MouseButtonReleased: if( e.mouseButton.button == 0 ) { moving = false; } break; case sf::Event::MouseMoved: { if( !moving ) break; x_new = e.mouseButton.x; y_new = e.mouseButton.y; break; } } } string poz_x = to_string( x_new - x_old ); string poz_y = to_string( y_new - y_old ); Text control( poz_x + "-" + poz_y + "-", font ); control.setCharacterSize( 13 ); control.setFillColor( Color::White ); control.setPosition( 10, 10 ); win.draw( control ); win.display(); } }
Efekt działania*: Wiem już, że błędnie jest odczytywana wartość y_new, ale wciąż nie wiem dlaczego ani jak to skorygować. Kurs SMFL opisuje funkcję 2fvector do przechwycenia położenia myszy, ale niestety nie wiem jak uzyskać osobno dostęp do parametru x/y, aby przeliczyć tablicę wartości x/y o nowe wartości. |
|
pekfos |
» 2017-07-28 22:00:54 case sf::Event::MouseMoved: { if( !moving ) break; x_new = e.mouseButton.x; y_new = e.mouseButton.y; break; } |
Ten kod jest błędny, nie możesz tu użyć e.mouseButton. Powinno być e.mouseMove. ale niestety nie wiem jak uzyskać osobno dostęp do parametru x/y |
"Niestety nie wiem"..? Raczej "właśnie wpisuję w google i czytam w dokumentacji", inaczej robisz to źle. |
|
PL_Andrev Temat założony przez niniejszego użytkownika |
» 2017-07-29 08:07:17 MouseMove - o to chodziło.
|
|
« 1 » |