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