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

[SFML 2.0] Wyświetlanie sprajta i zmiana jego pozycji

Ostatnio zmodyfikowano 2013-06-26 21:56
Autor Wiadomość
korkoran
Temat założony przez niniejszego użytkownika
[SFML 2.0] Wyświetlanie sprajta i zmiana jego pozycji
» 2013-06-26 21:47:17
Witam,

Postanowiłem zapoznać się z SFML 2.0. Nie miałem wcześniej doświadczenia z bibliotekami tego typu. Przerobiłem poradnik dostępny na cpp0x.pl i wszystko co tam było opisywane działa poprawnie. Problem pojawia się gdy dodaje zestaw komend, dzięki którym sprite poruszałby się w zależności os naciskanych strzałek. Problem leży w tym, że program nie wykazuje żadnej aktywności gdy naciskam strzałki. Wszystkie inne komendy działają bez problemu.

Poniżej zamieszczam kod:
C/C++
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "SFML - test" );
    while( oknoAplikacji.isOpen() )
    {
       
        sf::Texture tekstura;
        tekstura.loadFromFile( "obrazek.png" );
        sf::Sprite sprajt;
        sprajt.setTexture( tekstura );
        sf::Event zdarzenie;
        while( oknoAplikacji.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
                 oknoAplikacji.close();
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
                 oknoAplikacji.close();
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Right ) //Nie działa
                 sprajt.move( 50, 0 );
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Left ) //Nie działa
                 sprajt.move( - 50, 0 );
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Up ) //Nie działa
                 sprajt.move( 0, 50 );
           
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Down ) //Nie działa
                 sprajt.move( 0, - 50 );
           
        }
        oknoAplikacji.clear( sf::Color( 155, 100, 128 ) );
        sprajt.setPosition( 20, 50 );
        sprajt.setScale( 0.25, 0.25 );
        oknoAplikacji.draw( sprajt );
        oknoAplikacji.display();
    }
   
    return 0;
}
P-86299
akwes
» 2013-06-26 21:49:57
C/C++
sf::Texture tekstura;
tekstura.loadFromFile( "obrazek.png" );
sf::Sprite sprajt;
sprajt.setTexture( tekstura );

Czy jesteś pewien, że ten kod powinien się wykonywać w każdym obiegu pętli? Podpowiem, że czy aby na pewno chcesz aby w każdym obiegu pętli tworzyć teksturę, wczytywać ją, tworzyć nowy obiekt sprite z nową czystą wartością pozycji?

Co więcej, cały czas ustalasz pozycję tego sprita na stałe.
C/C++
sprajt.setPosition( 20, 50 );

Obrazując:
C/C++
A.ZMIEN_POZYCJE( - 50 );
A.USTAW_POZYCJE( 100 );
A.RYSUJ; // Jaka będzie tu pozycja? Coraz mniejsze o 50 czy zawsze 100?
Lub:
C/C++
i = i - 10;
i = 20;
std::cout << i; // Jakie tu będzie i? Coraz mniejsze o 10 czy zawsze 20?
:)
P-86301
korkoran
Temat założony przez niniejszego użytkownika
» 2013-06-26 21:56:45
Akwes: Oczywiście masz rację :). Teraz wszystko działa tak jak trzeba - nie do końca zrozumiałem podczas poradnika idee pętli głównej, ale już teraz ogarniam to trochę bardziej. Dziękuję.
P-86305
« 1 »
  Strona 1 z 1