[SFML] Jak działa rysowanie obiektów dziedziczonych po sf::Drawable?
Ostatnio zmodyfikowano 2016-01-27 05:01
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. #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? |
|
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. |
|
michal11 |
» 2016-01-26 23:45:08 Odpowiedź masz w dowolnym kursie programowania obiektowego. |
Szukaj w sekcji polimorfizm. |
|
pekfos |
» 2016-01-26 23:46:28 |
|
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: 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 |
|
« 1 » |