C++ SFML Nieprawidłowy ruch

C++ SFML Nieprawidłowy ruch
R0
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 5 lat
  • Postów:8
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:

Kopiuj
#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;
}
edytowany 1x, ostatnio: Ktos
Ktos
Do oznaczania bloków kodu służy ```, nie '''.
M0
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 9 godzin
  • Postów:367
0

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

R0
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 5 lat
  • Postów:8
0

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

lamerski
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 2 lata
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...


Życie jest zbyt krótkie, by marnować czas na spieszenie się.
R0
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 5 lat
  • Postów:8
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.

lamerski
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 2 lata
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?


Życie jest zbyt krótkie, by marnować czas na spieszenie się.
edytowany 1x, ostatnio: lamerski
R0
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 5 lat
  • Postów:8
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().

lamerski
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 2 lata
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.


Życie jest zbyt krótkie, by marnować czas na spieszenie się.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.