Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI][SFML] Zdarzenia.

Ostatnio zmodyfikowano 2011-10-31 20:03
Autor Wiadomość
blojayble
Temat założony przez niniejszego użytkownika
[WinAPI][SFML] Zdarzenia.
» 2011-10-31 19:46:00
Witam.


W jednym z moich programów chciałem połączyć SFML z WinAPI, ale natknąłem się na problem. Otóż nie wiem w jaki sposób mam korzystać z wydarzeń (sf::Event).

Wszelkie próby spełzły na niczym, gdziekolwiek bym nie umieścił GetEvent().

Korzystam z tego kodu:

http://www.sfml-dev.org/tutorials/1.6/graphics-win32.php


Wydaje mi się że to nie działa dlatego iż SFMLView jest w hierarchii pod Window, więc to on wszystko zgarnia.

Macie jakiś sposób, czy też pomysł, jak zrealizować to tak, aby można było w miarę normalnie korzystać z wydarzeń?

Dziękuję za wszystkie odpowiedzi.

Pozdrawiam.
P-43159
akwes
» 2011-10-31 19:49:51
Może dlatego że Event odczytuje się w pętli while :P ?

C/C++
while( okno.IsOpened() )
{
    while( okno.GetEvent( zdarzenie ) )
    {
        SendToALLObjectWhoWhantEvent( zdarzenie );
    }
   
    okno.Clear( sf::Color( 255, 240, 240 ) );
   
    okno.Display();
}

Po wyjściu z pętli event jest ... em, pusty :P
P-43160
blojayble
Temat założony przez niniejszego użytkownika
» 2011-10-31 20:03:05
Heh, no a niby jak miałem odczytywać?

Nie pisałem tego, bo chyba oczywiste. :P


Sęk w tym, że to nie działa. Podam fragment kodu.

C/C++
sf::Event Event;
MSG Message;


bool lol = false;


Message.message = static_cast < UINT >( ~WM_QUIT );
while( Message.message != WM_QUIT )
{
    if( PeekMessage( & Message, NULL, 0, 0, PM_REMOVE ) )
    {
        // If a message was waiting in the message queue, process it
        TranslateMessage( & Message );
        DispatchMessage( & Message );
    }
    else
    {
       
       
       
       
        while( SFMLView.GetEvent( Event ) )
        {
            if( Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::A ) lol = true;
           
        }
       
       
       
        // SFML
        SFMLView.Clear( sf::Color::Yellow );
       
        if( lol == true ) SFMLView.Draw( sf::Shape::Circle( 30, 30, 30, sf::Color::Blue ) );
       
        //SFMLView.Draw(sf::Shape::Circle(Message.pt.x,Message.pt.y,30,sf::Color::Cyan));
        SFMLView.Draw( sf::Shape::Circle( 20, 20, 30, sf::Color::Cyan ) );
       
        SFMLView.Display();
       
       
       
       
    }
}
P-43161
« 1 »
  Strona 1 z 1