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

Nie wyświetla obrazka jak kliknę np. B

Ostatnio zmodyfikowano 2012-03-04 13:25
Autor Wiadomość
Strielokdzielny
Temat założony przez niniejszego użytkownika
Nie wyświetla obrazka jak kliknę np. B
» 2012-03-04 12:46:36
Witam,


Mam oto taki kod:


C/C++
void CGameEngine::Run()
{
    std::cout << "Run(...) is started" << std::endl;
    while( m_render_window->IsOpened() )
    {
        //float ElapsedTime = GetRenderWindow()->GetFrameTime();
       
        float ElapsedTime = Clock.GetElapsedTime();
        //Clock.Reset();
       
        sf::Event Event;
        while( m_render_window->GetEvent( Event ) )
        {
            if( Event.Type == sf::Event::Closed )
            { gDrawableRender.ReleaseList(); //Ręczne usuwanie niektórych Singleton
                m_render_window->Close();
            }
           
            if( Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::Escape )
            {
                m_render_window->Close(); //np. zamknięcie aplikacji
            }
            if( Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::B )
            {
                sf::Image obrazek2;
                obrazek2.LoadFromFile( "logogry.png" );
                sf::Sprite naszSprajt;
                naszSprajt.SetImage( obrazek2 );
                naszSprajt.SetPosition( 120, 0 );
                m_render_window->Draw( naszSprajt );
            }
           
        }
        m_render_window->Clear( sf::Color( 0, 0, 0 ) );
       
        //Aktualizacja Gry
        Update( ElapsedTime );
        Clock.Reset(); //Chyba jest lepiej....
       
    }
}

Mam problem dotyczący tego, że gdy kliknę literkę B nie chce mi wyświetlić tego obrazka. Co zrobić, aby to normalnie działało?
Proszę o szybką pomoc. Dotyczy to bibllioteki SFML 1.6
P-51914
m4tx
» 2012-03-04 12:50:42
1. Obrazki wczytuj tuż po uruchomieniu gry, nie jak są potrzebne.
2. » KursyKurs STC kurs - kod dawaj w [cpp][/cpp]
3. Daj sobie boola, np. isSpriteDrawn, i jak użytkownik wciśnie B to daj
isSpriteDrawn = true;
, a potem (poza pętlą ze zdarzeniami)
if( isSpriteDrawn ) m_render_window->Draw( naszSprajt );
... I nie ma prawa nie działać.
P-51919
Strielokdzielny
Temat założony przez niniejszego użytkownika
A to gdzie?
» 2012-03-04 13:04:19

A to gdzie mam wrzucić?
C/C++
sf::Image obrazek2;
obrazek2.LoadFromFile( "logogry.png" );
sf::Sprite naszSprajt;
naszSprajt.SetImage( obrazek2 );
naszSprajt.SetPosition( 120, 0 );
m_render_window->Draw( naszSprajt );
P-51932
m4tx
» 2012-03-04 13:07:17
C/C++
sf::Image obrazek2;
obrazek2.LoadFromFile( "logogry.png" );
sf::Sprite naszSprajt;
naszSprajt.SetImage( obrazek2 );
naszSprajt.SetPosition( 120, 0 );
Przed pętlą główną.

m_render_window->Draw( naszSprajt );

W miejscu, gdzie rysujesz wszystko... U ciebie jest to z tego co widzę Update().
P-51933
Strielokdzielny
Temat założony przez niniejszego użytkownika
» 2012-03-04 13:15:54
Niestety to nic nie pomogło.

C/C++
void CGameEngine::Run()
{
    sf::Image obrazek2;
    obrazek2.LoadFromFile( "logogry.png" );
    sf::Sprite naszSprajt;
    naszSprajt.SetImage( obrazek2 );
    naszSprajt.SetPosition( 120, 0 );
   
    std::cout << "Run(...) is started" << std::endl;
    while( m_render_window->IsOpened() )
    {
        //float ElapsedTime = GetRenderWindow()->GetFrameTime();
       
        float ElapsedTime = Clock.GetElapsedTime();
        //Clock.Reset();
       
        sf::Event Event;
        while( m_render_window->GetEvent( Event ) )
        {
            if( Event.Type == sf::Event::Closed )
            { gDrawableRender.ReleaseList(); //Ręczne usuwanie niektórych Singleton
                m_render_window->Close();
            }
           
            if( Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::Escape )
            {
                isSpriteDrawn = true;
            }
           
        }
        m_render_window->Clear( sf::Color( 0, 0, 0 ) );
       
        //Aktualizacja Gry
        Update( ElapsedTime );
        Clock.Reset(); //Chyba jest lepiej....
       
        if( isSpriteDrawn ) m_render_window->Draw( naszSprajt );
       
        m_render_window->Display();
       
    }
}

Może ja coś źle robię, ale wydaję mi się, że zgodnie z instrukcją.
P-51937
m4tx
» 2012-03-04 13:23:23
if( Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::Escape )

Wciskasz B czy Escape? Bo ten kod powinien ustawić wyświetlanie sprite'a bo wciśnięciu Escape'a :P
P-51940
Strielokdzielny
Temat założony przez niniejszego użytkownika
» 2012-03-04 13:25:43
Po prostu zmieniłem, to przecież nie ma znaczenia. 

C/C++
void CGameEngine::Run()
{
    sf::Sprite naszSprajt;
    std::cout << "Run(...) is started" << std::endl;
    while( m_render_window->IsOpened() )
    {
       
        //float ElapsedTime = GetRenderWindow()->GetFrameTime();
       
        float ElapsedTime = Clock.GetElapsedTime();
        //Clock.Reset();
       
        sf::Event Event;
        while( m_render_window->GetEvent( Event ) )
        {
            if( Event.Type == sf::Event::Closed )
            { gDrawableRender.ReleaseList(); //Ręczne usuwanie niektórych Singleton
                m_render_window->Close();
            }
           
            if( Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::Escape )
            {
                isSpriteDrawn = true;
                sf::Image obrazek2;
                obrazek2.LoadFromFile( "logogry.png" );
                naszSprajt.SetImage( obrazek2 );
                naszSprajt.SetPosition( 120, 0 );
               
            }
           
        }
        m_render_window->Clear( sf::Color( 0, 0, 0 ) );
        if( isSpriteDrawn ) m_render_window->Draw( naszSprajt );
        //Aktualizacja Gry
        Update( ElapsedTime );
        Clock.Reset(); //Chyba jest lepiej....
        m_render_window->Display();
       
    }
}

Poprawiłem kod i teraz zamiast obrazka wyświetla mi się biały prostokąt. Co to może być tym razem?
@EDIT

Udało mi się rozwiązać problem. Dodałem po prostu w miejsce, gdzie wywołuje obrazek adres do niego.
P-51941
« 1 »
  Strona 1 z 1