Du bist nicht angemeldet.

Werbeanzeige

1

17.12.2016, 15:00

SFML kreis bewegt sich in die falschen richtung

Hallo mein problem ist es das sich mein kreis in die falsche richtung bewegt
z.b. wenn ich die taste "W" drücke dann bewegt er sich als hätte ich "S" gedrückt das gleiche ist auch mit "A" und "D"


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "game.h"
#include <iostream>

Game::Game() : Window(sf::VideoMode(640, 480), "SFML"), Shape()
{
    TimePerFrame = sf::seconds(1.f / 1000.f);
    PlayerSpeed = 50.f;
    Shape.setRadius(40.f);
    Shape.setPosition(100.f, 100.f);
    Shape.setFillColor(sf::Color::Cyan);
}

Game::~Game()
{

}

void Game::run()
{
    sf::Clock clock;
    sf::Time timeSinceLastUpdate = sf::Time::Zero;
    while (Window.isOpen())
    {
        ProcessEvents();
        timeSinceLastUpdate += clock.restart();
        while (timeSinceLastUpdate > TimePerFrame)
        {
            std::cout << 1.0f / timeSinceLastUpdate.asSeconds() << std::endl;
            timeSinceLastUpdate -= TimePerFrame;
            ProcessEvents();
            update(TimePerFrame);

        }
        render();

    }
}

void Game::ProcessEvents()
{
    sf::Event Event;
    while (Window.pollEvent(Event))
    {
        switch (Event.type)
        {
        case sf::Event::KeyPressed:
            handlePlayerInput(Event.key.code, true);
            break;
        case sf::Event::KeyReleased:
            handlePlayerInput(Event.key.code, false);
            break;
        case sf::Event::Closed:
            Window.close();
            break;
        }
    }

}

void Game::update(sf::Time deltaTime)
{

    sf::Vector2f movement(0.f, 0.f);
    if (IsMovingUp)
        movement.y -= PlayerSpeed;
    if (IsMovingDown)
        movement.y += PlayerSpeed;
    if (IsMovingLeft)
        movement.x -= PlayerSpeed;
    if (IsMovingRight)
        movement.x += PlayerSpeed;

    Shape.move(movement * deltaTime.asSeconds());
}

void Game::render()
{
    Window.clear();
    Window.draw(Shape);
    Window.display();
}

void Game::handlePlayerInput(sf::Keyboard::Key key, bool isPressed)
{
    if (key == sf::Keyboard::W)
        IsMovingUp = isPressed;
    if (key == sf::Keyboard::S)
        IsMovingDown = isPressed;
    if (key == sf::Keyboard::A)
        IsMovingLeft = isPressed;
    if (key == sf::Keyboard::D)
        IsMovingRight = isPressed;

}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CrazylLoLipop33« (17.12.2016, 15:08)


2

17.12.2016, 16:07

Wenn du doch weißt, dass es sich immer in die jeweils andere Richtung bewegt, wieso drehst du nicht einfach den Spieß um und machst aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
    sf::Vector2f movement(0.f, 0.f);
    if (IsMovingUp)
        movement.y -= PlayerSpeed;
    if (IsMovingDown)
        movement.y += PlayerSpeed;
    if (IsMovingLeft)
        movement.x -= PlayerSpeed;
    if (IsMovingRight)
        movement.x += PlayerSpeed;

das hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
    sf::Vector2f movement(0.f, 0.f);
    if (IsMovingUp)
        movement.y += PlayerSpeed;
    if (IsMovingDown)
        movement.y -= PlayerSpeed;
    if (IsMovingLeft)
        movement.x += PlayerSpeed;
    if (IsMovingRight)
        movement.x -= PlayerSpeed;

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

17.12.2016, 16:58

Nun, es mag ja sein, dass zwei Bugs sich gegenseitig aufheben, aber es bleiben zwei Bugs. Nach dem, was da an Code zu sehen ist, sollte sich das Ding richtig verhalten. Ergo ist das Problem womöglich woanders zu suchen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige