SFML C++ Zapisanie pozycji gracza
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

SFML C++ Zapisanie pozycji gracza

AutorWiadomość
Temat założony przez niniejszego użytkownika
SFML C++ Zapisanie pozycji gracza
» 2019-07-09 14:47:54
Witam, ma ktoś może pomysł jak mógłbym zapisać pozycje gracza w zmiennej, żebym potem mógł wykorzystać ja w pętli?
Nie wiem czy zrozumile, więc "tłumaczeni":
stara_pozycja zapisuje aktualną pozycję i potem jeśli nowa pozycja jest równa starej pozycji + 20 to wykonaj blebleble...
P-174905
» 2019-07-09 18:25:12
Nie znajduję słów. Zrób dokładnie tak, jak napisałeś. Nie mam pojęcia, co Cię powstrzymuje..
P-174906
Temat założony przez niniejszego użytkownika
» 2019-07-09 20:20:57
Próbowałem, ale. To chyba zwracana nadal aktualna pozycja... W każdym razie próbowałem i lipa
P-174907
» 2019-07-09 22:16:00
Podaj kod, z którym jest problem.
P-174908
Temat założony przez niniejszego użytkownika
» 2019-07-10 08:18:34
Od komentarza ten if jest problem, ale to nie trudno się domyślić...

C/C++
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

void setPosition( float x, float y );
void move( float X, float Y );

int main()
{
    sf::RenderWindow okno( sf::VideoMode( 800, 700, 32 ), "Platformowka" );
    okno.setFramerateLimit( 30 );
   
    sf::Texture tekstura_tlo;
    sf::Texture tekstura_podloga;
    sf::Texture tekstura_postac;
   
    tekstura_tlo.loadFromFile( "tlo.png" );
    tekstura_podloga.loadFromFile( "podloga.png" );
    tekstura_postac.loadFromFile( "postac.png" );
   
    sf::Sprite tlo;
    sf::Sprite podloga;
    sf::Sprite postac;
   
    tlo.setTexture( tekstura_tlo );
    podloga.setTexture( tekstura_podloga );
    postac.setTexture( tekstura_postac );
   
    postac.setPosition( 5, 603 );
   
    while( okno.isOpen() )
    {
        sf::Event zdarzenie;
        if( okno.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
            {
                okno.close();
            }
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
        {
            postac.move( 5, 0 );
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
        {
            postac.move( - 5, 0 );
        }
        //TUTAJ PROBLEM!!!
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) )
        {
            if( postac.getPosition().y - 20 == postac.getPosition().y )
            {
                postac.move( 0, + 20 );
            }
            else
            {
                postac.move( 0, - 20 );
            }
        }
        okno.clear();
       
        okno.draw( tlo );
        okno.draw( podloga );
        podloga.setPosition( 0, 650 );
        okno.draw( postac );
       
        okno.display();
    }
    return 0;
}
P-174909
» 2019-07-10 09:05:26
Ten warunek jest zawsze fałszywy, bo nie porównujesz poprzedniej pozycji gracza z aktualną, tylko (aktualną - 20) z aktualną. Musisz sobie stworzyć (gdzieś przed pętlą) zmienną pomocniczą
sf::Vector2f lastPosition
, którą będziesz przypisywał w tym if-ie.
C/C++
sf::Vector2f lastPosition
//...
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) )
{
    if( lastPosition.y - 20 == postac.getPosition().y )
    {
        postac.move( 0, + 20 );
    }
    else
    {
        postac.move( 0, - 20 );
    }
    lastPosition = postac.getPosition();
}
//...
P-174910
Temat założony przez niniejszego użytkownika
» 2019-07-10 11:56:38
Jeśli wysłałeś mi kod źródłowy, który powinien działać, to mam złe wieści...
Chyba, ż to tylko przykład i na takiej zasadzie mam to zrobić
P-174911
» 2019-07-10 15:49:19
» Kurs C++ / FAQNajczęściej spotykane bugi pytanie/odpowiedź Porównywanie liczb zmiennoprzecinkowych
EDIT: co to ma robić?
P-174912
« 1 » 2
 Strona 1 z 2Następna strona