C++ SFML Nieprawidłowy ruch

0

Witam, czytjąc kurs stronie cpp0x.pl chciałem pójść nieco dalej, jednak napotkałem problem z ruchem "gracza". Ruch jest o 5 pikseli jednak po puszczeniu klawisza "gracz" wraca na miejsce "spawnu". Poniżej zamieszczam kod:

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

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

int main()
{
    //ustawianie tekstury
    sf::Texture tekstura;
    sf::Texture gracz;
    //wczytanie tekstur
    tekstura.loadFromFile("tekstura.png");
    gracz.loadFromFile("gracz.png");
    //ustawianie sprite (obrazka)
    sf::Sprite loch;
    sf::Sprite player;
    //nadanie tekstur obrazkowi
    loch.setTexture(tekstura);
    player.setTexture(gracz);

    //tworzy okno
    sf::RenderWindow okno(sf::VideoMode(800, 600, 32), "KURS");
    okno.setFramerateLimit(30);
    while (okno.isOpen())
    {
        sf::Event zdarzenie;
        while (okno.pollEvent(zdarzenie))
        {
            if ( zdarzenie.type == sf::Event::Closed)
            {
                okno.close();
            }
        }
    okno.clear();
    //gdzie.co robi(co rysuje);
    okno.draw(loch);
    okno.draw(player);
    player.setPosition(110, 105);
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            {
                player.move (5,0);
            }
            else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            {
                player.move (-5, 0);
            }
            else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            {
                player.move (0, -5);
            }
            else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            {
                player.move(0, 5);
            }
    okno.display();
    }
    return 0;
}
0

player.setPosition(110, 105)
Ustawiasz cały czas pozycje gracza w jedno miejsce. Daj to przed główną pętle

0

Dzięki, a wie ktoś może jak mógłbym ustawić dwa tła?

0
R0ut4 napisał(a):

Dzięki, a wie ktoś może jak mógłbym ustawić dwa tła?

Pomóż nam zrozumieć Twoje intencje.
Chcesz mieć dwukolorowe tło czy dwa różne, jednokolorowe tła, w zależności od wystąpienia konkretnego warunku?
Jeśli chcesz mieć dwa kolory jednocześnie, może wczytaj tło z dwukolorowego obrazka...

0

Wybacz, za mało informacji 😅... Chodzi o to żeby 1 tło to były kolory np, a 2 to były ścianki, i na tej podstawie mógłbym napisać kolizję gracza z tymi sciankami.

0

Nie traktuj ścian jak tła. Tło może być czymś nieistotnym z punktu widzenia interakcji pomiędzy obiektami, a ściany - wręcz przeciwnie. Potraktuj więc ściany jako obiekty, z którymi obiekt sterowany przez użytkownika może się zderzyć. Czy coś stoi na przeszkodzie temu, by w Twojej grze ścianki były reprezentowane przez statyczne (nieruchome) sprity?

0

"Plansza" wygląda tak jak na zdjęciu:
https://imgupload.pl/zdjecie/da4Oy
Te czarne jk można się domyślić to ściany. Z podwójnym tłem nie wyszło, pomyślałem, czy by nie spróbować, każdej ściany umieścić osobno w danych miejscach i wtedy dać kolizje jako getGlobalBound().

2

Zetknąłem na planszę i podtrzymuję to, co napisałem wcześniej: oddziel elementy, które mają reagować z otoczeniem od tych, które są neutralne. To, co na pozór wydaje się skomplikowane, może na dłuższą metę okazać się znacznie mniej czaso- i pracochłonne. Ułatw sobie życie i nie komplikuj niepotrzebnie kodu. Być może za chwilę będziesz chciał coś zmienić na planszy, dlatego planuj strukturę kodu tak, by banalna zmiana nie zmuszała Cię do nadmiernego wysiłku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1