Hab mal ein wenig drüber geschaut.
[1] Muss
Delta_x = Player_x - mouse_x;
Delta_y = Player_y - mouse_y;
nicht anders herum sein?
Delta_x = mouse_x - Player_x;
Delta_y = mouse_y - Player_y;
Damit verschiebt sich der Nullpunkt zur Spielerposition und Delta umkreist den Spieler.
[2] Warum rechnest du Bogenmaß zu Grad? Die atan2, cos und sin Funktionen dürften das selbe System benutzen.
[3] Mit cos und sin bekommt man die x, y Schussrichtung mit der Länge 1. Diese Schussrichtung musst du Speichern und in jedem Update mit der vergangenen zeit und der Geschwindigkeit Multiplizieren.
Also:
m_ShotAngleX = cos(Angle);
m_ShotAngleY = sin(Angle);
m_xPos += m_ShotAngleX * 10.0f * Timer->GetTimeElapsed();
m_yPos += m_ShotAngleY * 10.0f * Timer->GetTimeElapsed();
Also sollte es 2 Funktionen geben:
|
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
|
void CShot::StarteSchuss(float Player_x, float Player_y)
{
double Delta_x, Delta_y;
int mouse_x;
int mouse_y;
SDL_GetMouseState(&mouse_x, &mouse_y);
Delta_x = mouse_x - Player_x; //[Edit] hatte ich falschrum eingefügt
Delta_y = mouse_y - Player_y; //[Edit] hatte ich falschrum eingefügt
double Angle = atan2(Delta_y, Delta_x);
m_ShotAngleX = cos(Angle);
m_ShotAngleY = sin(Angle);
m_xPos = Player_x;
m_yPos = Player_y;
}
void CShot::UpdateSchuss()
{
m_xPos += m_ShotAngleX * 10.0f * Timer->GetTimeElapsed();
m_yPos += m_ShotAngleY * 10.0f * Timer->GetTimeElapsed();
}
|
Wenn ich nicht alles verzapft hab müsste es ungefähr so funktionieren.
Ich hoffe ich konnte dir helfen.