Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

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 738

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