Ich habe jetzt die Kollisionsabfrage in die Game-Klasse verlagert.
Jetzt habe ich aber das Problem, dass wenn man sich schräg bewegen möchte (z.B. W+D) die Kollisionsfunktion nicht richtig funktioniert.
Dazu ein kleiner Ausschnitt:
|
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
|
// CheckMovement
//
void CPlayer::CheckMovement()
{
if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
Move(0, -10);
cout << "w" << endl;
if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
Move(-10, 0);
cout << "wa" << endl;
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
Move(10, 0);
cout << "wd" << endl;
}
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
Move(-10, 0);
cout << "a" << endl;
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
Move(10, 0);
cout << "d" << endl;
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
Move(0, 10);
cout << "s" << endl;
}
} // CheckMovement
|
Es wird im Falle einer schrägen Bewegung zwei Mal die Move-Methode ausgeführt,
die Kollisionsabfrage allerdings nicht nach jeder der beiden, sondern erst nach der zweiten Move.
So wird zwar festgestellt, dass eine Kollision stattfindet, allerdings kann ich diese nicht beheben, da das Zurücksetzen auf die alten Koordinaten ja nicht richtig funktioniert,
weil die Koordinaten vor dem ersten Move beim zweiten Aufruf von Move überschrieben werden.
Wie soll ich dieses Problem beheben.