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

SFML - przykładowy kod, CircleShape

42 Warsaw Coding Academy
0 głosów
1,421 wizyt
pytanie zadane 1 sierpnia 2016 w C i C++ przez Gramad Obywatel (1,660 p.)

Witam, zaczynam swoją przygodę z SFML i napotkałem pewne wątpliwości dot. przykładowego kodu podanego na sfml-dev.org.
Oto on:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}

Pytanie 1 dotyczy zapisu event.type. Jeżeli type to atrybut klasy event, to gdzie jest on deklarowany? Czy ma to miejsce w wewnątrz window.pollEvent(event) ? Jeżeli tak, to jak podejrzeć wnętrze tej funkcji?

Pytanie 2

Dlaczego w kodzie jest napisane:

sf::Event::Closed

Zamiast:

sf::Event::EventType::Closed

Odnosząc się do pliku nagłówkowego(http://www.sfml-dev.org/documentation/2.3.2/Event_8hpp_source.php) to ten drugi zapis wydaje mi się poprawny...Natomiast kompilator się ze mną nie zgadza. 
Dlaczego ten drugi zapis jest błędny ?

komentarz 1 sierpnia 2016 przez Patrycjerz Mędrzec (192,320 p.)

Kto ci powiedział, że drugi zapis jest błędny? Są dwie poprawne wersje:

sf::Event::Closed
sf::Event::EventType::Closed

 

komentarz 2 sierpnia 2016 przez Gramad Obywatel (1,660 p.)

Kompilator wyrzuca taki błąd:
sf::Event::EventType' is not a class or namespace
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

2 odpowiedzi

+1 głos
odpowiedź 1 sierpnia 2016 przez MetRiko Nałogowiec (37,110 p.)
wybrane 2 sierpnia 2016 przez Gramad
 
Najlepsza

Co do pytania drugiego:
Tak na prawdę jeżeli tworzysz gdzieś w kodzie enum'a to możesz odwołać się do jego zmiennych bez podawania nazwy. Prosty przykład:

enum Enumeracja
{
A=0,
B,
C
};

int a=Enumeracja::A;
int b=B; //Ten zapis również jest poprawny.. dlatego warto chować enum'y do struktur x) Inaczej może się później nieźle pogubić.. poza tym praktycznie każde dobre IDE w "auto-uzupełnianiu" będzie ci wyświetlać wartości w enumie.
komentarz 1 sierpnia 2016 przez smh Obywatel (1,940 p.)

Można też zwyczajnie zamienić enum na enum class, by wymusić ten "pełny" zapis.

komentarz 1 sierpnia 2016 przez MetRiko Nałogowiec (37,110 p.)
przywrócone 1 sierpnia 2016 przez MetRiko

Nie do końca.. przy enum class taki zapis wyrzuci error.. trzeba wcześniej stworzyć odpowiednią zmienną do której przypiszesz wartość enum:

#include <iostream>

enum class Enumeracja
{ A=0, B, C };


int main()
{
    //Bad
    int a=Enumeracja::A; //Error
    std::cout<<a //Error
    
    //Good
    Enumeracja b=Enumeracja::B;
    std::cout<<static_cast<int>(b); //Wymagane rzutowanie na typ int
}
komentarz 1 sierpnia 2016 przez smh Obywatel (1,940 p.)
Prawda, choć można od razu wykonać rzutowanie: bez nazywania pośredniczącej zmiennej.
std::cout << static_cast<int>(Enumeracja::B);
+1 głos
odpowiedź 1 sierpnia 2016 przez niezalogowany
Zawartość event jest definiowana (przypisywana) wewnątrz pollEvent (zgodnie z twoim przypuszczeniem), nie bez powodu przekazujesz tam referencję na Event ( http://www.sfml-dev.org/documentation/2.3.2/classsf_1_1Window.php#a338e996585faf82e93069858e3b531b7 )

(src: http://www.sfml-dev.org/documentation/2.3.2/Window_2Window_8hpp_source.php ) oprócz tego kompletną implementację masz w źródłach biblioteki (Downloads)

Podobne pytania

0 głosów
1 odpowiedź 445 wizyt
0 głosów
0 odpowiedzi 254 wizyt
pytanie zadane 28 listopada 2020 w C i C++ przez Mateusz1223 Bywalec (2,440 p.)
0 głosów
0 odpowiedzi 271 wizyt

93,377 zapytań

142,379 odpowiedzi

322,526 komentarzy

62,724 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...