Hallo, ich versuche gerade das Spiel Breakanoid vom Buch zu programmieren. Nur hab ich jetzt schon längere Zeit dieses Problem und komm einfach nicht dahinter.
Und zwar bin ich gerade beim Erstellen, Rendern und beim Bewegen eines Balles. Das Intro, das Hauptmenü sowie das Rendern des Levels und des Schlägers wie auch das Bewegen des Schlägers hat bereits schon einwandfrei funktioniert.
Für die Verwaltung wird ein Klassen-Array von CBall erstellt, wo 16 Bälle platz haben und von dort verwaltet werden. Nur die Instanz "m_aBall" und natürlich sämltiche Werte die sich drauf beziehen werden beim Kompilieren als "nichtdeklarierter Bezeichner" angezeigt. Aber im Programm selbst werden sie erkannt. Ich kann den Fehler einfach nicht finden. Aber erstmal ein wenig Code.
Zuerst einmal die Klasse CBall selbst:
|
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
|
// Verwendete Symbole vordeklarieren
class CGame;
class CBall
{
public:
// Variablen
CGame *m_pGame;
BOOL m_bExists;
BOOL m_bGrabbed;
tbVector3 m_vBallPos;
tbVector3 m_vBallVel;
// Konstruktor
inline CBall()
: m_pGame(NULL)
, m_bExists(FALSE)
, m_bGrabbed(FALSE)
, m_vBallPos(0.0f)
, m_vBallVel(0.0f)
{
}
// Methoden
tbResult Render(float fTime);
tbResult Move(float fTime);
tbVector3 GetAbsolutePos();
};
|
Jetzt dort wo der Fehler unteranderem auftritt => CGame:
|
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
|
class CGame
{
public:
// Modelle
tbModel *m_pLevelModel;
tbModel *m_pPaddleModel;
tbModel *m_pBallModel;
tbModel *m_apBlockModel[4];
// Variablen
BOOL m_bPaused;
BOOL m_bGameOver;
int m_iLevel;
int m_iTriesLeft;
int m_iScore;
tbVector3 m_vPaddlePos;
tbVector3 m_vPaddleVel;
float m_fLevelTime;
// Instanz für Bälle
CBall m_aBall[16]; <-------- Hier die Instanz die nicht deklariert ist. Er sagt auch, dass vorher ein
";" fehlt, wüsste aber nicht wo das sein könnte bzw. konnte auch nix finden.
// Konstruktor
inline CGame()
: m_pLevelModel(NULL)
, m_pPaddleModel(NULL)
, m_pBallModel(NULL)
, m_bPaused(FALSE)
, m_bGameOver(FALSE)
, m_iLevel(0)
, m_iTriesLeft(0)
, m_iScore(0)
, m_vPaddlePos(0.0f)
, m_vPaddleVel(0.0f)
, m_fLevelTime(0.0f)
{
ZeroMemory(m_apBlockModel, sizeof(m_apBlockModel));
ZeroMemory(m_aBall, sizeof(m_aBall)); <--------- Hier wird es schon nicht mehr erkannt
}
// Methoden
tbResult Init();
tbResult Exit();
tbResult Load();
tbResult Unload();
tbResult Move(float fTime);
tbResult Render(float fTime);
tbResult InitLevel(int iLevel);
int CreateBall(tbVector3 vPosition, tbVector3 vVelocity, BOOL bGrabbed);
tbResult CreateBlockRow(char *pcBlocks, tbVector3 vStartPos);
};
|
Ich habe natürlich den Quellcode mit dem vom Buch verglichen und komm auf keine Fehler. Wie schon oben erwähnt wird überall wo "m_aBall" verwendet wird ein Fehler ausgeworfen, aber im Programmcode selbst nicht als Fehler gekennezichnet. Das Logfile sagt das die Nachrichtenschleife betreten wird, allerdings dann wieder verlässt, höchstwahrscheinlich wenn es auf "m_aBall" trifft.
Hättet ihr eine Idee an was das liegen könnte? Vl seh ich den Wald vor lauter Bäumen grad nicht, weil ich schon zu lange dran sitze
lg Epi