Hallo,
ich arbeite zur Zeit an einer Game Klasse. Ich habe soweit alles fertig und theoretisch müsste alles funktionieren.
Nun habe ich das Problem dass sich sich die Klasse (Verwaltet Spielestates) in jeder der 3 Statemethoden aufhängt. Egal mit welcher ich initialisiere, es ist als ob sich das Programm in einer Endlosschleife aufhängt.
Das Programm ruft noch das jeweilige cout auf, danach reagiert das "SFML" fenster nicht mehr.
Ich hoffe mir kann jemand helfen.
Hier der Code:
CGame.h
|
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#ifndef _GAME_h
#define _GAME_h
#include "AllHeaders.h"
class CGame
{
protected:
sf::RenderWindow MainWindow;
sf::Event Event;
int State;
bool Running;
public:
//InitFunktion
void InitGame(int Height, int Width, int Colour);
//Die 3 Spielzustände
//IntroState ( 1 )
void IntroState(void);
//MenueState ( 2 )
void MenueState(void);
//MainState ( 3 )
void MainState(void);
//Methoden für State
//Methode um Spielzustand zu bekommen
int CurrentState(void)
{
return this->State;
};
//Methode um Spielzustand zu erhöhen
void NextState(void)
{
if (this->State > 0 && this->State < 3)
this->State++;
else if (this->State == 3)
this->State = 1;
};
//Methode um Spielzustand zu senken
void PreviousState(void)
{
if (this->State > 1 && this->State < 3)
this->State--;
else if (this->State == 1)
this->State = 3;
};
//Methode um Spielzustand seperat zu ändern
// 1 = Introstate
// 2 = Menuestate
// 3 = Mainstate
void ChangeState(int NewState)
{
if (NewState > 0 && NewState < 4)
this->State = NewState;
};
//Methode um herrauszufinden, ob Game läuft
bool IsRunning(void)
{
return this->Running;
};
};
#endif
|
CGame.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#include "AllHeaders.h"
void CGame::InitGame(int Height, int Width, int Colour)
{
this->MainWindow.Create(sf::VideoMode(Height, Width, Colour), "SFML Graphics", sf::Style::Titlebar);
this->Running = true;
this->State = 1;
}
void CGame::IntroState()
{
std::cout<<"Spielzustand: Intro";
while (this->CurrentState() == 1)
{
if (this->MainWindow.GetInput().IsKeyDown(sf::Key::N))
{
this->NextState();
}
this->MainWindow.Display();
}
}
void CGame::MenueState()
{
std::cout<<"Spielzustand: Menue";
while (this->CurrentState() == 2)
{
if (this->MainWindow.GetInput().IsKeyDown(sf::Key::N))
{
this->NextState();
}
this->MainWindow.Display();
}
}
void CGame::MainState()
{
std::cout<<"Spielzustand: Main";
while (this->CurrentState() == 3)
{
if (this->MainWindow.GetInput().IsKeyDown(sf::Key::N))
{
this->NextState();
}
this->MainWindow.Display();
}
}
|
Main.cpp
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
int main()
{
//MainGame
CGame Game;
Game.InitGame(800, 600, 32);
//MainLoop-------------------------
while (Game.IsRunning() == true)
{
if (Game.CurrentState() == 1)
Game.IntroState();
else if (Game.CurrentState() == 2)
Game.MenueState();
else if (Game.CurrentState() == 3)
Game.MainState();
}
//---------------------------------
return 0;
}
|