Ich versuch grad mein Spiel zu erweitern, und dazu brauch ich die Position vom Spieler als Singleton.
Ich nehm mal an, dass ich irgendwas beim Stack falsch gemacht hab, hab selber aber keine Lösung gefunden, obwohl ich so ziemlich das gleiche schon mal gemacht hab.
Also zur Erklärung: Ich will das Rechteck m_Player auch in einer anderen Datei verwenden. Dazu hab ich ein Singleton gemacht, und folgende Funktion erstellt (cout zum Testen)
|
C-/C++-Quelltext
|
1
|
SDL_Rect GetRect() { cout << m_Player.x << endl; return m_Player; }
|
Diese Funktion liefert mir dann aber nicht m_Player so wie er in (.ccp) Z. 11 und 27 geändert wurde zurück, sondern z.b. m_Player.x = 0.
Liegt das daran, dass es vor der Funktion auf den Stack kommt, und nachher wieder so wie vorher ist?
(gekürzter Quellcode)
Der Header
|
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
|
#ifndef PLAYER_HPP
#define PLAYER_HPP
#include <list>
#include"Singleton.hpp"
#define g_pPlayer CPlayer::Get()
class CPlayer : public TSingleton<CPlayer>
{
public:
void Update();
void Reset();
SDL_Rect GetRect() { cout << m_Player.x << endl; return m_Player; }
private:
void ProcessMoving();
float m_fXPos; // X-Position des Spielers
float m_fYPos; // Y-Position des Spielers
SDL_Rect m_Player;
};
#endif
|
Die .cpp Datei
|
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
|
#include "Player.hpp"
// Reset
//
// Aufgabe: Spielerwerte auf Standard setzen
//
void CPlayer::Reset()
{
// Startposition des Spielers
m_fXPos = 376.0f;
m_fYPos = 520.0f;
m_Player.x = 376;
m_Player.y = 520;
m_Player.h = 64;
m_Player.w = 64;
} // Reset
// Update
//
// Aufgabe: Spieler updaten
//
void CPlayer::Update()
{
// Bewegung des Spielers
ProcessMoving();
m_Player.x = static_cast<int> (m_fXPos);
m_Player.y = static_cast<int> (m_fYPos);
} // Update
|