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

[SFML 2.1] Poruszanie sprajtem

Ostatnio zmodyfikowano 2014-01-12 23:16
Autor Wiadomość
dawid
Temat założony przez niniejszego użytkownika
[SFML 2.1] Poruszanie sprajtem
» 2014-01-11 18:01:48
Witam,
w jaki sposób poruszyć sprajtem w prawo? Chcę zrobić coś w rodzaju biegania.

Mam taki kod:

C/C++
#include <SFML/Graphics.hpp>
int main()
{
    sf::RenderWindow okno( sf::VideoMode( 800, 600 ), "Ruch obiektow" );
   
    sf::Font font;
    font.loadFromFile( "tungab.ttf" ); //Ladowanie czcionki
    sf::Text Text;
    Text.setFont( font );
    Text.setString( "Ruch obiektow" ); //Tekst, który bedzie wyswietlony
   
   
    sf::Texture tekstura;
    tekstura.loadFromFile( "image/4.png" );
   
    sf::Sprite obrazek;
    obrazek.setTexture( tekstura );
   
    //Text.setColor(sf::Color( 26, 69, 432)); //kolor tekstu
    Text.setPosition( 100, 100 ); //pozycja tekstu w pixelach
    while( okno.isOpen() )
    {
        sf::Event event;
        while( okno.pollEvent( event ) )
        {
            if( event.type == sf::Event::Closed )
                 okno.close();
           
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
            {
                obrazek.setPosition( 20, 20 );
               
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
            {
                Text.setString( "Strzalka lewo" );
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) )
            {
                Text.setString( "Strzalka gora" );
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) )
            {
                Text.setString( "Strzalka dol" );
            }
           
        }
        okno.clear();
        okno.draw( Text ); //wyświetlenie tekstu w oknie
        okno.draw( obrazek );
        okno.display();
       
    }
    return 0;
}

Jak poruszyć obiektem?

obrazek.setPosition( 20, 20 );
P-101867
ShadowkhaN
» 2014-01-11 18:07:05

C/C++
float position_x = 0;
float position_y = 0;

if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
{
    obrazek.setPosition( position_x++, position_y );
   
}


Oczywiście wartości początkowe, czyli position_x ustawiasz wedle uznania.
P-101870
MrPoxipol
» 2014-01-11 19:06:52
Po prostu ::move(x, y)? (zobacz sobie » KursyKurs SFML 2.x, C++ kurs + » KursyWytwarzanie Gier 2D, C++ kurs może coś Ci się przyda).
A. I dodaj limit klatek (pętla stałokrokowa).
P-101872
dawid
Temat założony przez niniejszego użytkownika
» 2014-01-11 21:16:43
Ale chodziło mi o coś takiego, że wiele razy wciskam prawy przycisk i wiele razy się przesuwa.
P-101886
dawid
Temat założony przez niniejszego użytkownika
» 2014-01-11 21:31:36
Ok mam tylko czemu obrazek przesuwa się cały czas nie w prawo tylko na południowy-wschód?
P-101888
ShadowkhaN
» 2014-01-11 21:59:05
Zapewne używasz funkcji move, to jeżeli jej używasz to zwiększaj tylko pozycję x, a nie x i y :/ Czyli chyba move(x,0);
P-101890
dawid
Temat założony przez niniejszego użytkownika
» 2014-01-12 00:41:45
Ok działa tylko nie wszystko.

Tak mam dla strzałki w prawo i na dół:

C/C++
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
{
    Text.setString( "Strzalka w prawo" );
    obrazek.move( position_x++, 0 );
   
}

C/C++
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) )
{
    obrazek.move( 0, position_y++ );
    Text.setString( "Strzalka dol" );
}

Ale jak zrobić w lewo i do góry?
P-101899
ShadowkhaN
» 2014-01-12 09:23:03
Hmm, no jeżeli position_x++ przesuwa obrazek w prawo no to chyba normalne, że position_x-- przesunie obrazek w lewo? xD
Podobnie z góra i dół.
I na Twoim miejscu nie robił bym tego move(position_x++, 0), jak co to move(position_x, 0) bo jak będziesz zwiększał position_x ciągle to z czasem będzie tak duża wartość, że nawet nie zobaczysz jak się porusza obrazek :)

Możesz zrobić tak

 
C/C++
#include <SFML/Graphics.hpp>
int main()
{
    sf::RenderWindow okno( sf::VideoMode( 800, 600 ), "Ruch obiektow" );
   
    sf::Font font;
    font.loadFromFile( "tungab.ttf" ); //Ladowanie czcionki
    sf::Text Text;
    Text.setFont( font );
    Text.setString( "Ruch obiektow" ); //Tekst, który bedzie wyswietlony
   
   
    sf::Texture tekstura;
    tekstura.loadFromFile( "image/4.png" );
   
    sf::Sprite obrazek;
    obrazek.setTexture( tekstura );
   
    //Text.setColor(sf::Color( 26, 69, 432)); //kolor tekstu
    Text.setPosition( 100, 100 ); //pozycja tekstu w pixelach
    while( okno.isOpen() )
    {
        sf::Event event;
        while( okno.pollEvent( event ) )
        {
            if( event.type == sf::Event::Closed )
                 okno.close();
           
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
            {
                position_x++;
               
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
            {
                position_x--;
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) )
            {
                position_y--;
            }
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) )
            {
                position_y++;
            }
           
        }
        okno.clear();
        okno.draw( Text ); //wyświetlenie tekstu w oknie
        obrazek.setPosition( position_x, position_y );
        okno.draw( obrazek );
        okno.display();
       
    }
    return 0;
}
P-101903
« 1 » 2
  Strona 1 z 2 Następna strona