Bonjour,
Je suis en train de creer une librairie à partir de la sdl pour me permettre de codé plus rapidement mes prochains projets.Mais j'ai un petit probléme voici mon code
Voici le code ma page principal
Le code de la page gw (seulement les fonctions importante)(public gwObject)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include "gw.h" using namespace std; class MainWindow : public gw { public: MainWindow(); void update(); void keyPress(); private: }; MainWindow::MainWindow() : gw("Game of money", gwSize(1280, 800)) { connect(gw::KeyDown, this, SLOT(MainWindow::keyPress)); connect(gw::Update, this, SLOT(MainWindow::update)); show(); } void MainWindow::update() { clear(); SDL_Flip(getScreen()); } void MainWindow::keyPress() { //exit(69); } int main (int argc, char** argv) { MainWindow(); return 0; }
Ma page gwObject
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 gw::gw(const char *title, gwSize size) { m_done = false; SDL_Init(SDL_INIT_VIDEO); atexit(SDL_Quit); setTitle(title); setTimeRefresh(5); setSize(size); m_screen = SDL_SetVideoMode(m_size.width, m_size.height, 16, SDL_HWSURFACE); } void gw::clear() { SDL_FillRect(getScreen(), 0, SDL_MapRGB(getScreen()->format, 100, 100, 100)); } void gw::show() { while (!getDone()) { SDL_Event event; SDL_WaitEvent(&event); switch (event.type) { case SDL_QUIT: setDone(true); break; case SDL_KEYDOWN: { /* if (event.key.keysym.sym == SDLK_ESCAPE) setDone(true); */ triggerEvent(gw::KeyDown); break; } } clear(); SDL_Flip(getScreen()); triggerEvent(gw::Update); SDL_Delay(m_timeRefresh); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #define SLOT(slot) (void (gwObject::*)(...)) &slot typedef struct AEvent AEvent; class gwObject { public: enum Object{None, gw}; gwObject(); void connect(int event, gwObject *object, void (gwObject::*function)(...)); int triggerEvent(int event); std::vector<AEvent> events; private: }; struct AEvent { int event; gwObject *object; void (gwObject::*function)(...); };Le problème est que lorsque l'update ce fait le programme se ferme ça n'arrive pas si je change son contenu par une autre fonction exemple setTitle qui appartient à la classe gw.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include "gwObject.h" gwObject::gwObject() { } void gwObject::connect(int event,gwObject *object, void (gwObject::*function)(...)) { AEvent a; a.object = object; a.event = event; a.function = function; events.push_back(a); } int gwObject::triggerEvent(int event) { for (unsigned int i = 0; i < events.size(); i++) { if (events[i].event == event) { gwObject gw; gw = *events[i].object; (gw.*events[i].function)(); } } return event; }
Je rappelle que MainWindow : public gw et que gw : public gwObject.
Merci d'avance. =)
Partager