• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Poruszanie się obiektu tylko w czterech kierunkach

Object Storage Arubacloud
+1 głos
171 wizyt
pytanie zadane 9 września 2018 w C i C++ przez PatrykT Nowicjusz (180 p.)

Witam,

Napisałem grę w której obiekt powinien się poruszać tylko i wyłącznie w czterech kierunkach (góra, dół, prawo, lewo). Niestety gdy puszczam jedna strzałkę i szybko naciskam inną obiekt porusza się na ukos.

Byłbym wdzięczny za podpowiedź jak rozwiązać mój problem. Z góry dziękuję za wszystkie rady

Pozdrawiam.

kwadrat.h

#ifndef KWADRAT_H 
#define KWADRAT_H 
#include <SFML/Graphics.hpp>
using namespace sf;

class kwadrat : public sf::Drawable
{
public:
    kwadrat(float X, float Y); 
    ~kwadrat() = default;
    void update(); 
    RectangleShape Shape; 
    const float length{75.0f}; 
    const float height{50.0f};
    private:
    void draw(RenderTarget& target, RenderStates state) const override; 
    const float rectanglevelocity{1.f};
    Vector2f Velocity{rectanglevelocity, rectanglevelocity}; 
};
#endif

kwadrat.cpp

include "kwadrat.h"
#include <SFML/Graphics.hpp>
#include <windows.h>
using namespace sf;


kwadrat::kwadrat(float X, float Y)
{
    Shape.setPosition(X, Y); 
    Shape.setSize({this->length, this->height}); 
    Shape.setFillColor(Color::White);
    Shape.setOrigin(this->length / 2,  this->height / 2);

void  kwadrat::draw(RenderTarget& target, RenderStates state) const 
{
    target.draw(this-> Shape, state);
}

void  kwadrat::update()
{
    Shape.move(this->Velocity); 
    if(Keyboard::isKeyPressed(Keyboard::Key::Left))
    {
        Velocity.x = -rectanglevelocity;
        Shape.setRotation( 270 );

    }
    else if((Keyboard::isKeyPressed(sf::Keyboard::Right))
    {
        Velocity.x = rectanglevelocity;
        Shape.setRotation( 90 );

    }
    else if(Keyboard::isKeyPressed(Keyboard::Key::Up))
    {
        Velocity.y = -rectanglevelocity;
        Shape.setRotation( 0 );

    }
    else if(Keyboard::isKeyPressed(Keyboard::Key::Down))
    {
        Velocity.y = rectanglevelocity;
        Shape.setRotation( 180);

    }
    else
    {
        Velocity.x = 0;
        Velocity.y = 0;
    }
}

 

2 odpowiedzi

0 głosów
odpowiedź 9 września 2018 przez Munvik Dyskutant (9,350 p.)
wybrane 11 września 2018 przez PatrykT
 
Najlepsza
Ustaw Velocity.y = 0 jeżeli została nacisnieta strzałka w prawo albo w lewo i na odwrót.
1
komentarz 11 września 2018 przez PatrykT Nowicjusz (180 p.)

Dziękuję za rade, problem rozwiązany smiley

0 głosów
odpowiedź 10 września 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Zerowanie Velocity zrob tuz po funkcji move. I radze zapoznac sie z lista inicjalizacyjna.

Podobne pytania

0 głosów
1 odpowiedź 935 wizyt
0 głosów
1 odpowiedź 929 wizyt
pytanie zadane 12 marca 2019 w OpenGL, Unity przez niezalogowany
0 głosów
1 odpowiedź 1,955 wizyt
pytanie zadane 9 października 2018 w C i C++ przez luna22 Obywatel (1,420 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...