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

[SFML] Jak działa rysowanie obiektów dziedziczonych po sf::Drawable?

Ostatnio zmodyfikowano 2016-01-27 05:01
Autor Wiadomość
kmlkamilek
Temat założony przez niniejszego użytkownika
[SFML] Jak działa rysowanie obiektów dziedziczonych po sf::Drawable?
» 2016-01-26 23:27:51
Zastanawia mnie jak to działa. Użycie jest proste. Tworzy się klasę, która dziedziczy po sf::Drawable, przesłania metodę draw(), a potem by to narysować na oknie wywołuję się na rzecz obiektu okna metodę draw.

C/C++
#include <SFML/Graphics.hpp>

class DrawableObject
    : public sf::Drawable
{
    virtual void draw( sf::RenderTarget & target, sf::RenderStates states ) const
    {
        target.draw( sprite );
    };
   
    sf::Sprite sprite;
};

int main()
{
    sf::RenderWindow window( sf::VideoMode( 800, 600, 32 ), "Rysowanko", sf::Style::Titlebar );
    DrawableObject object;
   
   
    while( true )
    {
        window.clear();
        window.draw( object );
        window.display();
    }
}

Jak to działa, że metoda draw(), wywołana na rzecz okna, wykonuje metodę z klasy dziedziczącej?
P-144047
pekfos
» 2016-01-26 23:43:10
Jak to działa, że metoda draw(), wywołana na rzecz okna, wykonuje metodę z klasy dziedziczącej?
Odpowiedź masz w dowolnym kursie programowania obiektowego.
P-144050
michal11
» 2016-01-26 23:45:08
Odpowiedź masz w dowolnym kursie programowania obiektowego.

Szukaj w sekcji polimorfizm.
P-144052
pekfos
» 2016-01-26 23:46:28
» KursyProgramowanie obiektowe, C++ kurs
*dowolny kurs programowania obiektowego*
P-144053
kmlkamilek
Temat założony przez niniejszego użytkownika
» 2016-01-27 05:01:57
Odpowiedź była prostsza niż myślałem. Klasa sf::RenderWindow dziedziczy metodę draw() po klasie sf::RenderTarget.
Wygląda ona tak:

C/C++
void RenderTarget::draw( const Drawable & drawable, const RenderStates & states )
{
    drawable.draw( * this, states );
}

Odwołując się do mojego przykładu:
1. Najpierw wywołanie na rzecz okna, metody draw, której argumentem jest obiekt dziedziczący po sf::Drawable
2. Na rzecz tego obiektu wywołuję się metodę draw i w tym przypadku argumentem typu sf::RenderTarget jest obiekt okna.
3. Na samym końcu wywołuje się window.draw(sprite);

Czasami takie odsyłanie do innych źródeł jest frustrujące, z drugiej jest to dobry kopniak, by się ruszyć i samemu poszukać.
Dziękuję za pomoc. :D
P-144057
« 1 »
  Strona 1 z 1