Probléme création de lib a partir de la sdl
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
Code:
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;
} |
Le code de la page gw (seulement les fonctions importante)(public gwObject)
Code:
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);
}
} |
Ma page gwObject
Code:
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)(...);
}; |
Code:
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;
} |
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.
Je rappelle que MainWindow : public gw et que gw : public gwObject.
Merci d'avance. =)