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

question-closed SFML, własny typ kształtu

Object Storage Arubacloud
0 głosów
298 wizyt
pytanie zadane 28 września 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 28 września 2017 przez Jakub 0

Hej, ostatnio zabrałem się za naukę SFML i jestem na tym rozdziale: https://www.sfml-dev.org/tutorials/2.1/graphics-shape.php

Tam dowiedziałem się że kształty można również poszerzyć o swoją klasę, to jest przykładowy kod rysujący elipsę:
 

class EllipseShape : public sf::Shape
{
public :

    explicit EllipseShape(const sf::Vector2f& radius = sf::Vector2f(0, 0)) :
    m_radius(radius)
    {
        update();
    }

    void setRadius(const sf::Vector2f& radius)
    {
        m_radius = radius;
        update();
    }

    const sf::Vector2f& getRadius() const
    {
        return m_radius;
    }

    virtual unsigned int getPointCount() const
    {
        return 30; 
    }

    virtual sf::Vector2f getPoint(unsigned int index) const
    {
        static const float pi = 3.141592654f;

        float angle = index * 2 * pi / getPointCount() - pi / 2;
        float x = std::cos(angle) * m_radius.x;
        float y = std::sin(angle) * m_radius.y;

        return sf::Vector2f(m_radius.x + x, m_radius.y + y);
    }

private :

    sf::Vector2f m_radius;
};

Przyznam że tak średnio rozumiem działanie metod wirtualnych (przesłoniętych):

getPoint(unsigned int index) oraz getPointCount()

Będę bardzo wdzięczny za opisanie kodu czy też pokazanie go na prostszym przykładzie niż elipsa (np kwadrat).

Oczywiście zadowolę się też z linka do stronki gdzie jest to dobrze wyjaśnione bo nie mogłem takiej znaleźć. Z góry dziękuje i serdecznie pozdrawiam

komentarz zamknięcia: już znam wytłumaczenie
1
komentarz 28 września 2017 przez j23 Mędrzec (194,920 p.)

Pytasz się ogólnie o metody wirtualne, czy konkretnie o to, co robią metody getPoint() i getPointCount()?

komentarz 28 września 2017 przez Jakub 0 Pasjonat (23,120 p.)
Bardziej szczegółowo co robią i jak działają. Zwlaszcza jak sie ma to co zwraca funkcja getPoint do narysowania czegoś
komentarz 28 września 2017 przez Jakub 0 Pasjonat (23,120 p.)
Mowię o prostszym kształcie bo sama idea elipsy może to komplikować

1 odpowiedź

+1 głos
odpowiedź 28 września 2017 przez Knayder Nałogowiec (37,640 p.)
wybrane 28 września 2017 przez Jakub 0
 
Najlepsza

getPointCount()

Po prostu zwraca ilość wierzchołków, z których składa się dana figura. 

getPoint(unsigned int index)
musisz tam zwrócić pozycję kolejnych punktów

Baardzo prosty przykład jak zrobić kwadrat. Nie jest on poprawny itp.

 

int getPointCount(){
    return 4;
}

sf::Vector2f getPoint(unsigned int i){
    switch(i){
        case 0u:
            return sf::Vector2f{0.f, 0.f};
        break;
        case 1u:
            return sf::Vector2f{10.f, 0.f};
        break;
        case 2u:
            return sf::Vector2f{10.f, 10.f};
        break;
        case 3u:
            return sf::Vector2f{0.f, 10.f};
        break;
    }
}

 

komentarz 28 września 2017 przez Jakub 0 Pasjonat (23,120 p.)
Dzięki ,teraz juz to rozumiem. Tylko dlaczego ten sposób był zły ?
1
komentarz 28 września 2017 przez Knayder Nałogowiec (37,640 p.)
No raczej słabo robić kształty na switchu c'nie
1
komentarz 28 września 2017 przez Knayder Nałogowiec (37,640 p.)
hehe, jednak twórcy SFML zrobili tak samo jak ja xD
https://github.com/SFML/SFML/blob/master/src/SFML/Graphics/RectangleShape.cpp

Nevermind then :D
komentarz 28 września 2017 przez Jakub 0 Pasjonat (23,120 p.)
Racja ale na switch'u to łatwiej zrozumiałem, dzięki jeszcze raz i pozdrawiam

Podobne pytania

0 głosów
1 odpowiedź 331 wizyt
–2 głosów
2 odpowiedzi 405 wizyt
pytanie zadane 5 stycznia 2017 w C i C++ przez majmucha Nowicjusz (120 p.)
0 głosów
1 odpowiedź 151 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...