SFML Sprawdzanie czy użytkownik kliknął sprite'a myszką

0

Witam,
Mam oto taką aplikacje, chciałbym zrobić tak by po kliknięciu obrazku start wyczyscil sie ekran i wyświetliła gra (pong)

tzn.

  1. i jak sprawdzić czy użytkownik kliknął dany obrazek (bo mam rzobione, że sie podświetla jak sie na niego najedzie)

  2. i druga sprawa jak zdefiniować, że po jego kliknięciu przeskakuje do innej aplikacji albo nie wiem innego miejsca w kodzie moze zrobic 2 pętle programu i jak sie kliknie ten obrazek to ta pierwsze ma break i przeskakuje do tej drugiej z grą? Pomóżcie prosze jak to sensownie zrobić.

dla lepszego zrozumienia problemu kod programów

Menu:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" );
    
    //Utworzenie białego obrazka i wykonanie przekształceń na sprajcie
    sf::Image start;
    start.LoadFromFile( "C:\\Documents and Settings\\admin\\Moje dokumenty\\Visual Studio 2010\\Projects\\pongprojekt\\GFX\\start.jpg" );;
    sf::Sprite przyciskstart;
    przyciskstart.SetImage( start );
    przyciskstart.SetPosition( 400, 300 );
    przyciskstart.SetScale( 1, 1 );
    przyciskstart.SetCenter( start.GetWidth() / 2.0f, start.GetHeight() / 2.0f );
    przyciskstart.SetColor( sf::Color( 0x00, 0xff, 0x00, 0x80 ) );
    
    while( oknoAplikacji.IsOpened() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) )
        {
            if( zdarzenie.Type == sf::Event::Closed )
                 oknoAplikacji.Close();
            
        } //while
        
        oknoAplikacji.Clear( sf::Color::Black );
        przyciskstart.Rotate( 0.01f );
        
        //Tu sprawdzanie czy mysz jest nad sprajtem czy nie oraz modyfikowanie jego koloru
        const sf::Input & sterowanie = oknoAplikacji.GetInput();
        sf::Vector2f punkt = przyciskstart.TransformToLocal( sf::Vector2f(( float ) sterowanie.GetMouseX(),( float ) sterowanie.GetMouseY() ) );
        bool bCzyZaznaczony =( punkt.x >= 0 && punkt.y >= 0 && punkt.x <= start.GetWidth() && punkt.y <= start.GetHeight() );
        przyciskstart.SetColor( bCzyZaznaczony ? sf::Color::Green: sf::Color::Red );
        
        oknoAplikacji.Draw( przyciskstart );
        oknoAplikacji.Display();
    } //while
    return 0;
} 

GRA (Pong, jeszcze bez piłki :) )

 #include <SFML/Graphics.hpp>

 int main()
 {
 sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "WIMIIPONG AGH 2012" );
 // Ukraina poczatek wczytania
 sf::Image obrazek;
 obrazek.LoadFromFile( "C:\\Documents and Settings\\admin\\Moje dokumenty\\Visual Studio 2010\\Projects\\pongprojekt\\GFX\\ukraina.jpg" );


 sf::Sprite naszSprajt;
 naszSprajt.SetImage( obrazek );
 naszSprajt.SetPosition( 700, 450 );
 naszSprajt.SetScale( 5, 5 );
 // ukraina koniec wczytania obrazu
 //Polska wczytanie obrazu
 sf::Image pol;
 pol.LoadFromFile( "C:\\Documents and Settings\\admin\\Moje dokumenty\\Visual Studio 2010\\Projects\\pongprojekt\\GFX\\polska.jpg" );


 sf::Sprite g1;
 g1.SetImage( pol );
 g1.SetPosition( 100, 450 );
 g1.SetScale( 5, 5 );
 //koniec wczytania obrazu Polska

 while( oknoAplikacji.IsOpened() )
 {
 sf::Event zdarzenie;
 //zamykanie okna
 while( oknoAplikacji.GetEvent( zdarzenie ) )
 {
 if( zdarzenie.Type == sf::Event::Closed )
 oknoAplikacji.Close();

 }
 // sterowanie ukraina
 const sf::Input & sterowanie = oknoAplikacji.GetInput();



 if( sterowanie.IsKeyDown( sf::Key::Up ) )
 naszSprajt.Move( 0, - 0.2 );

 if( sterowanie.IsKeyDown( sf::Key::Down ) )
 naszSprajt.Move( 0, + 0.2 );

 //sterowanie polska
 const sf::Input & sterowaniepl = oknoAplikacji.GetInput();



 if( sterowaniepl.IsKeyDown( sf::Key::W ) )
 g1.Move( 0, - 0.2 );

 if( sterowaniepl.IsKeyDown( sf::Key::S ) )
 g1.Move( 0, + 0.2 );

 oknoAplikacji.Clear( sf::Color( 0, 255, 100 ) );
 oknoAplikacji.Draw( naszSprajt );
 oknoAplikacji.Draw( g1 );
 oknoAplikacji.Display();
 }
 return 0;
 }
0

hmm... dobra pierwszy problem rozwiązałem w ten sposób:

  const sf::Input & sterowanie = oknoAplikacji.GetInput();
        sf::Vector2f punkt = przyciskstart.TransformToLocal( sf::Vector2f(( float ) sterowanie.GetMouseX(),( float ) sterowanie.GetMouseY() ) );
        bool bCzyZaznaczony =( punkt.x >= 0 && punkt.y >= 0 && punkt.x <= start.GetWidth() && punkt.y <= start.GetHeight() );
        przyciskstart.SetColor( bCzyZaznaczony ? sf::Color::Green: sf::Color::Red );
		if (bCzyZaznaczony==true)
		{
			
		if( zdarzenie.Type == sf::Event::MouseButtonPressed && zdarzenie.MouseButton.Button == sf::Mouse::Left )
		{
			std::cout<<"\a";
			
			
		}
		 
		}

ale jak teraz zrobic by po nacisnieciu przycisku kasowalo sie to co jest na ekranie i wyswietlala sie gra ?

tzn. wiem jak zrobic cos po kliknięciu danej ikonki przykladowo spisalem tam alarm :P

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