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

[SFML 2.1] Problem z mouseMove.x

Ostatnio zmodyfikowano 2013-12-03 22:04
Autor Wiadomość
kokon
Temat założony przez niniejszego użytkownika
[SFML 2.1] Problem z mouseMove.x
» 2013-12-02 20:26:38
Witam!

Moim problemem jest to, że gdy nacisnę jakikolwiek przycisk, zmienna
zdarzenie.mouseMove.x
 wynosi 0 lub 1 (odpowiednio do lewego i prawego przycisku myszki). Jak temu zapobiec i czemu tak się dzieje?

PS: Nadmienię że tak się dzieje tylko w przypadku koordynatu X, Y działa normalnie.
P-98112
pekfos
» 2013-12-02 20:31:22
Po co sprawdzasz mouseMove, skoro zdarzenie dotyczy naciśnięcia przycisku?
P-98115
kokon
Temat założony przez niniejszego użytkownika
» 2013-12-02 20:33:31
Ponieważ chcę sprawdzić czy kliknięty został obiekt na scenie, albo po prostu koordynaty.

C/C++
if(
zdarzenie.mouseButton.button == sf::Mouse::Left
&& zdarzenie.mouseMove.x >= 195
&& zdarzenie.mouseMove.x <= 545 )
P-98116
pekfos
» 2013-12-02 20:37:43
Pozycję kursora masz w mouseButton.
P-98119
kokon
Temat założony przez niniejszego użytkownika
» 2013-12-02 20:46:44
W sensie tak?
zdarzenie.mouseButton.x
Teraz to mi już w ogóle jakieś dziwne liczby wyskakują (a y jest zawsze równe 3)
P-98122
pekfos
» 2013-12-02 20:49:05
Pokaż więcej kodu.
P-98123
kokon
Temat założony przez niniejszego użytkownika
» 2013-12-02 20:54:42
C/C++
if( zdarzenie.mouseButton.button == sf::Mouse::Left
&& zdarzenie.mouseButton.x >= 195
&& zdarzenie.mouseButton.x <= 545 )
     oknoAplikacji.close();

sf::Event zdarzenie;
sf::RenderWindow oknoAplikacji( sf::VideoMode( 1280, 680, 32 ), "..." );

Cała pętla (z usunięciem np. wyświetlania wszystkich grafik)
C/C++
while( oknoAplikacji.isOpen() )
{
    accumulator += clock.restart().asSeconds();
    if( accumulator > TIME_STEP )
    {
        oknoAplikacji.clear( sf::Color( 0, 0, 0 ) );
        while( oknoAplikacji.pollEvent( zdarzenie ) )
        {
            //tu obsługa zdarzeń
            if( zdarzenie.type == sf::Event::Closed )
            {
                //tu np. zapisanie stanu gry
                oknoAplikacji.close();
            }
           
            if( zdarzenie.mouseButton.button == sf::Mouse::Left
            && zdarzenie.mouseButton.x >= 195
            && zdarzenie.mouseButton.x <= 545 )
                 oknoAplikacji.close();
           
        };
        std::cout << "X: " << zdarzenie.mouseButton.x << ", Y:" << zdarzenie.mouseButton.y << std::endl;
        //Usuń z akumulatora czas, aby móc ponownie zacząć liczyć
        accumulator -= TIME_STEP;
    }
    oknoAplikacji.display();
}

Oraz zmienne do ograniczenia FPS:
C/C++
//Tworzymy zegar dzięki któremu będziemy mogli odmierzać czas
sf::Clock clock;

//Zmienna wskazująca ile czasu minęło od ostatniej aktualizacji logiki
float accumulator = 0;

//Zmienna wskazująca, co jaki czas ma następować aktualizacja logiki
float TIME_STEP = 0.03f;
P-98127
pekfos
» 2013-12-02 21:12:40
Ten kod nie ma sensu. Po pierwsze, przy sprawdzaniu kliknięcia nie sprawdzasz, czy zdarzenie go dotyczy. Po drugie, wyświetlasz, dawno nieaktualne, wartości X i Y.
P-98131
« 1 » 2
  Strona 1 z 2 Następna strona