Zaznaczenie obiektu [sfml]

0
#include <SFML/Graphics.hpp>

struct RObiekt
{
    double x;
    double y;
    double fPredkosc;
   
    RObiekt( double f_x = 0.0, double f_y = 0.0)
        : x( f_x )
        , y( f_y )
    { }
};

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Takie tam" );
    oknoAplikacji.UseVerticalSync( true );
   
    typedef std::vector < RObiekt > VObiektyT;
    VObiektyT vObiekty;
   
    vObiekty.push_back( RObiekt( 50, 50) );
    vObiekty.push_back( RObiekt( 100, 250 ) );
    vObiekty.push_back( RObiekt( 300, 100 ) );
    vObiekty.push_back( RObiekt( 500, 500 ) );
   
    while( oknoAplikacji.IsOpened() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) )
        {
            if( zdarzenie.Type == sf::Event::Closed )
                 oknoAplikacji.Close();
           
            if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape )
                 oknoAplikacji.Close();       
       
        oknoAplikacji.Clear();
		sf::Shape Circle;		
		sf::Vector2f punkt;
		const sf::Input & sterowanie = oknoAplikacji.GetInput();
		for( VObiektyT::const_iterator i = vObiekty.begin(); i != vObiekty.end(); ++i ){
			Circle = sf::Shape::Circle( i->x, i->y, 10, sf::Color::Red  );
			punkt = Circle.TransformToLocal( sf::Vector2f(( float ) sterowanie.GetMouseX(),( float ) sterowanie.GetMouseY() ) );
			bool bCzyZaznaczony = ( punkt.x >= 0 && punkt.y >= 0 && punkt == sf::Vector2f(Circle.GetPosition()));
            if(bCzyZaznaczony == 1)
				Circle.SetColor( sf::Color::Green );
            oknoAplikacji.Draw( Circle );
		}

        oknoAplikacji.Display();
    }
    return 0;
}

Chodzi o to, że jak najadę myszką na obiekt to ma zamienić go na zielony kolor, natomiast jak myszka nie będzie się znajdowała w obszarze obiektu to ma być kolor czerwony. Napisałem program (powyżej), ale narysował mi tylko obiekty, ale nie dział zmiana kolorów, czy ktoś jest w stanie mi pomóc?

0

Nie wiem, po co robisz jakąś transformację.

const bool bCzyZaznaczony = hypot(i->x - sterowanie.GetMouseX(), i->y - sterowanie.GetMouseY()) <= 10;
Circle = sf::Shape::Circle(i->x, i->y, 10, bCzyZaznaczony ? sf::Color::Green : sf::Color::Red);
oknoAplikacji.Draw(Circle);

1 użytkowników online, w tym zalogowanych: 0, gości: 1