• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

scroll w sfml'u

0 głosów
1,600 wizyt
pytanie zadane 10 lutego 2016 w C i C++ przez Pixel040 Gaduła (3,100 p.)
jak zrobić by program sprawdzał czy kółeczko w myszce jest poruszane ?

if (sf::Mouse::isButtonPressed(sf::Mouse::????))

1 odpowiedź

+1 głos
odpowiedź 10 lutego 2016 przez draghan VIP (106,230 p.)
edycja 10 lutego 2016 przez draghan
 
Najlepsza

Wyszukiwarka naprawdę nie gryzie. ;) Na przyszłość staraj się tak proste problemy rozwiązywać samodzielnie. ;)

>>TEGO KODU NIE NALEŻY UŻYWAĆ, ZAWIERA PRZESTARZAŁE ELEMENTY<<

if (event.type == sf::Event::MouseWheelMoved)
{
    if(event.mouseWheel.delta == 1)
    {
        // ruch w górę
    }
    else
    {
        // ruch w dół
    }
}

>>POPRAWIONY KOD:<<

if (event.type == sf::Event::MouseWheelScrolled)
{
    if(event.mouseWheelScroll.delta > 0)
    {
        // w górę
    }
    else if(event.mouseWheelScroll.delta < 0)
    {
        // w dół
    }
}

 

komentarz 10 lutego 2016 przez Pixel040 Gaduła (3,100 p.)
a tak żeby był poza evetem
komentarz 10 lutego 2016 przez draghan VIP (106,230 p.)

Wczytując się w dokumentację, zauważyłem że podałem błędny kod.

Powinien działać, ale jest niezalecany. Tutaj poprawna wersja:

if (event.type == sf::Event::MouseWheelScrolled)
{
    if(event.mouseWheelScroll.delta > 0)
    {
        // w górę
    }
    else if(event.mouseWheelScroll.delta < 0)
    {
        // w dół
    }
}

Bezpośredniego dostępu do scrolla nie ma, ponieważ jest to nielogiczne. Scroll nie posiada stanu, można go tylko "przestawić" względem poprzedniej pozycji. Cytat za dokumentacją:

There is no function for reading the current state of the mouse wheel. Since the wheel can only be moved relatively, it has no absolute state that can be queried.

Także jedyna opcja obsłużenia scrolla, to event.

komentarz 11 lutego 2016 przez Pixel040 Gaduła (3,100 p.)
ok dzięki :)
komentarz 14 marca 2020 przez KokosNaPalmie Nowicjusz (100 p.)

Niestety z jakiegoś powodu podany kod nie działa:

if (this->evnt.type == sf::Event::MouseWheelScrolled)
        {
            std::cout << "[DEBUG]: mouse wheel scrolled\n";
            if (evnt.mouseWheelScroll.delta < 0)
            {
                this->things["KEYBINDS"]->changeColor(sf::Color::Red);
                std::cout << "[DEBUG]: View moved up\n";
                view->move(sf::Vector2f(0, -view_speed * this->dt));
            }
            else if (evnt.mouseWheelScroll.delta > 0)
            {
                this->things["KEYBINDS"]->changeColor(sf::Color::Red);
                std::cout << "[DEBUG]: View moved down\n";
                view->move(sf::Vector2f(0,  view_speed * this->dt));
            }
            if (dt == 0) std::cout << "f\n";
        }

pytałem się już na forum SFML ale dostałem odpowiedź o tym że mógłbym w std::cout użyć std::flush : )

wersja SFML: 2.5.1

Podobne pytania

+2 głosów
2 odpowiedzi 855 wizyt
pytanie zadane 24 stycznia 2016 w HTML i CSS przez robert9620 Stary wyjadacz (11,640 p.)
0 głosów
1 odpowiedź 231 wizyt
pytanie zadane 5 lutego 2016 w JavaScript przez Headhunter Gaduła (4,450 p.)
0 głosów
0 odpowiedzi 677 wizyt

93,776 zapytań

142,736 odpowiedzi

323,388 komentarzy

63,381 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...