Geht es jetzt wie gewünscht oder nicht?
Nein, leider nicht. Ich habe nochmal alles langsam und Schritt für Schritt mit dem Debugger analysiert, aber irgendwie finde ich nicht den Fehler
Wer mir helfen will, hier der relevante Code:
PlayState.cpp:
|
C-/C++-Quelltext
|
1
2
3
4
|
// time ist in PlayState.cpp als sf::Time deklariert
time = clock.getElapsedTime();
mPlayer->Update(time);
|
Die fast komplette Update-Methode in Player.cpp:
|
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
|
#pragma region CheckKeyborad
float accel = 0.1f;
// Tastenabfrge
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
a.x = -accel;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
a.x = accel;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
a.y = -accel;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
a.y = accel;
}
// Beschleunigung ist die Änderung der Geschwindigkeit
v.x = v.x + (a.x * dT.asSeconds());
v.y = v.y + (a.y * dT.asSeconds());
// Bis jetzt würde das Schiff einfach weiter gleiten,
// deshalb muss die Geschwindigkeit in jedem Frame reduziert werden.
const float k = 0.95f;
v.x *= k;
v.y *= k;
// Außerdem sollte man noch eine Maximalgeschwindigkeit angeben,
// da die Geschwindigkeit sonst zu groß werden kann.
const float maxvel = 100;
if (v.x > maxvel)
{
v.x = maxvel;
}
if (v.x < -maxvel)
{
v.x = -maxvel;
}
// Sprite bewegen
mSprite.move(v.x, v.y);
dT.Zero;
a.x = 0; // Beschleunigung auf NULL setzen, falls nichts gedrückt wird.
a.y = 0; // Beschleunigung auf NULL setzen, falls nichts gedrückt wird.
#pragma endregion CheckKeyborad
|
Ich hänge gerade irgendwie