Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.3] MouseButtonReleased | MouseButtonPressed

Ostatnio zmodyfikowano 2015-06-04 10:51
Autor Wiadomość
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.


C/C++
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;
    }
}
P-133098
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 ) ) { }
P-133107
DejaVu
» 2015-06-02 21:30:38
komunikat dotyczy prawego przycisku a zmienne mowia o lewym przycisku :)
P-133109
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 ;/
P-133113
pekfos
» 2015-06-03 10:39:07
Podaj więcej kodu.
P-133127
ArgonZapan
Temat założony przez niniejszego użytkownika
» 2015-06-03 11:07:00
C/C++
#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 ) );
            }
           
        } //while
        okno.clear( sf::Color( 255, 255, 255 ) );
       
        RenderBuff( okno );
        //okno.setFramerateLimit(120);
        okno.display();
    } //while
}

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;
            }
        }
    }
}
P-133129
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

C/C++
#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;
            }
           
           
        } //while
        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();
    } //while
    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ć.
P-133138
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.
P-133149
« 1 » 2
  Strona 1 z 2 Następna strona