ArgonZapan Temat założony przez niniejszego użytkownika |
[SFML 2.3] MouseButtonReleased | MouseButtonPressed » 2015-06-02 20:12:00 Potrzebuje 2 koordynaty, jedna przy wciśnięciu a druga po spuszczeniu klawisza myszki. Te 2 funkcje wydają się być najbardziej odpowiednie ale nie działa to tak jak trzeba. gdy wcisnę klawisz odpala się od razu "Released", a "Pressed" jest pomijana. Wie ktoś gdzie jest problem ? szukałem w dokumentacji jakichś zamienników ale nie znalazłem niczego konkretnego. if( event.type == sf::Event::MouseButtonPressed ) { if( event.mouseButton.button == sf::Mouse::Left ) { std::cout << "the right button was pressed" << std::endl; std::cout << "mouse x: " << event.mouseButton.x << std::endl; std::cout << "mouse y: " << event.mouseButton.y << std::endl; } } if( event.type == sf::Event::MouseButtonReleased ) { if( event.mouseButton.button == sf::Mouse::Left ) { std::cout << "the right button was released" << std::endl; std::cout << "mouse x: " << event.mouseButton.x << std::endl; std::cout << "mouse y: " << event.mouseButton.y << std::endl; } }
|
|
Monika90 |
» 2015-06-02 21:26:44 Może masz popsutą mysz? Bo kod wygląda OK, pod warunkiem, że masz go wewnątrz pętli while( window.pollEvent( event ) ) { } |
|
DejaVu |
» 2015-06-02 21:30:38 komunikat dotyczy prawego przycisku a zmienne mowia o lewym przycisku :) |
|
ArgonZapan Temat założony przez niniejszego użytkownika |
» 2015-06-02 22:04:58 Zmiana myszki nie pomogła :) Jeśli kod się zgadza, to możliwe że problem z win10 związany
zmiana systemu również nie pomogła ;/ |
|
pekfos |
» 2015-06-03 10:39:07 Podaj więcej kodu. |
|
ArgonZapan Temat założony przez niniejszego użytkownika |
» 2015-06-03 11:07:00 #include "graphic.h"
Graphic::Graphic() : Board() { textures._black_field.loadFromFile( "Sprite/_black_field.bmp" ); textures._black_field_b.loadFromFile( "Sprite/_black_field_b.bmp" ); textures._black_field_b_k.loadFromFile( "Sprite/_black_field_b_k.bmp" ); textures._black_field_w.loadFromFile( "Sprite/_black_field_w.bmp" ); textures._black_field_w_k.loadFromFile( "Sprite/_black_field_w_k.bmp" ); textures._white_field.loadFromFile( "Sprite/_white_field.bmp" ); textures.black_field.loadFromFile( "Sprite/black_field.bmp" ); textures.black_field_b.loadFromFile( "Sprite/black_field_b.bmp" ); textures.black_field_b_k.loadFromFile( "Sprite/black_field_b_k.bmp" ); textures.black_field_w.loadFromFile( "Sprite/black_field_w.bmp" ); textures.black_field_w_k.loadFromFile( "Sprite/black_field_w_k.bmp" ); textures.white_field.loadFromFile( "Sprite/white_field.bmp" ); }
Graphic::~Graphic() { }
void Graphic::run() { sf::RenderWindow okno( sf::VideoMode( 800, 800 ), "Checkers" ); sf::Clock stoper; sf::Vector2i pos_s, pos_e; while( okno.isOpen() ) { sf::Event event; while( okno.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) okno.close(); if( event.type == sf::Event::MouseButtonPressed ) { if( event.mouseButton.button == sf::Mouse::Left ) { std::cout << "the left button was pressed" << std::endl; std::cout << "mouse x: " << event.mouseButton.x << std::endl; std::cout << "mouse y: " << event.mouseButton.y << std::endl; } } if( event.type == sf::Event::MouseButtonReleased ) { if( event.mouseButton.button == sf::Mouse::Left ) { std::cout << "the left button was released" << std::endl; std::cout << "mouse x: " << event.mouseButton.x << std::endl; std::cout << "mouse y: " << event.mouseButton.y << std::endl; } } if( event.type == sf::Event::Resized ) { okno.setSize( sf::Vector2u( 800, 800 ) ); } } okno.clear( sf::Color( 255, 255, 255 ) ); RenderBuff( okno ); okno.display(); } }
void Graphic::RenderBuff( RenderWindow & okno ) { for( size_t i = 0; i < 8; i++ ) { for( size_t j = 0; j < 8; j++ ) { if(( i + j ) % 2 == 1 ) { fields[ i ][ j ].setPosition( i * 100, 700 - j * 100 ); fields[ i ][ j ].setTexture( textures.white_field ); okno.draw( fields[ i ][ j ] ); continue; } else if( getFieldPosition( i, j ) == EMPTY ) { fields[ i ][ j ].setPosition( i * 100, 700 - j * 100 ); fields[ i ][ j ].setTexture( textures.black_field ); okno.draw( fields[ i ][ j ] ); continue; } else if( getFieldPosition( i, j ) == WHITE ) { fields[ i ][ j ].setPosition( i * 100, 700 - j * 100 ); fields[ i ][ j ].setTexture( textures.black_field_w ); okno.draw( fields[ i ][ j ] ); continue; } else if( getFieldPosition( i, j ) == BLACK ) { fields[ i ][ j ].setPosition( i * 100, 700 - j * 100 ); fields[ i ][ j ].setTexture( textures.black_field_b ); okno.draw( fields[ i ][ j ] ); continue; } else if( getFieldPosition( i, j ) == WHITE_K ) { fields[ i ][ j ].setPosition( i * 100, 700 - j * 100 ); fields[ i ][ j ].setTexture( textures.black_field_w_k ); okno.draw( fields[ i ][ j ] ); continue; } else if( getFieldPosition( i, j ) == BLACK_K ) { fields[ i ][ j ].setPosition( i * 100, 700 - j * 100 ); fields[ i ][ j ].setTexture( textures.black_field_b_k ); okno.draw( fields[ i ][ j ] ); continue; } } } }
|
|
ArgonZapan Temat założony przez niniejszego użytkownika |
» 2015-06-03 15:00:47 stworzyłem nowy projekt i dopisałem obsługę myszy na wszystkie klawisze za pomocą switch'a #include <SFML/Graphics.hpp> #include <iostream> #include <cmath>
int main() { sf::RenderWindow okno( sf::VideoMode( 320, 240 ), "Kurs SFML 2.0 - http://cpp0x.pl" ); sf::Clock stoper; while( okno.isOpen() ) { sf::Event event; while( okno.pollEvent( event ) ) { switch( event.type ) { case sf::Event::Closed: okno.close(); break; case sf::Event::KeyPressed: std::cout << "KeyPressed" << std::endl; break; case sf::Event::KeyReleased: std::cout << "KeyReleased" << std::endl; break; case sf::Event::MouseButtonPressed: std::cout << "MouseButtonPressed" << std::endl; break; case sf::Event::MouseButtonReleased: std::cout << "MouseButtonReleased" << std::endl; break; default: break; } } okno.clear(); sf::CircleShape ksztalt( std::sin( stoper.getElapsedTime().asSeconds() ) * okno.getSize().y / 8 + okno.getSize().y / 4 ); ksztalt.setOrigin( sf::Vector2f( ksztalt.getRadius(), ksztalt.getRadius() ) ); ksztalt.setPosition( okno.getSize().x / 2.0f, okno.getSize().y / 2.0f ); ksztalt.setFillColor( sf::Color::Yellow ); okno.draw( ksztalt ); okno.display(); } return 0; }
Dzieje się tak samo, jak w moim projekcie, ale przy okazji znalazłem ciekawą sytuację. Gdy wcisnę jakikolwiek guzik to wywoływana jest tylko funkcja "Released". gdy przejadę rolką, to włącza się funkcja "Pressed". Dzieje się tak zarówno u mnie na kompie z Win10, jak i u kolegi z Win8. Nie mam już pomysłów jak to naprawić. |
|
Monika90 |
» 2015-06-03 18:50:18 U mnie na Windows XP ten program działa z SFML 2.2 i 2.3. Sprawdź u siebie wersję 2.2. |
|
« 1 » 2 |