[C++]Le blit ne fonctionne pas
Salut ! :)
Je souhaite débuter un jeu avec SDL en C++, seulement lorsque je blitte une image elle n'apparaît pas sur la surface maîtresse...
Pourtant les arguments que je passe à la fonction sont corrects :
Code:
1 2
|
(&SDL_Surafce, &SDL_Rect, &SDL_Surface, &SDL_Rect) |
Voici donc mon code complet, c-à-d le "main.cpp" gérant les évenements, "classes.h" en tant que header, et "classes.cpp" qui définit une classe Warrior servant à créer un guerrier idiomatiquement nommé Link ;) Notez que le fichier "link.gif" existe bien et que le problème ne vient donc pas de là...
main.cpp
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 51 52 53 54 55
| #include "classes.h"
int main ( int argc, char** argv )
{
bool done;
SDL_Init(SDL_INIT_VIDEO);
SDL_EnableKeyRepeat(10, 10);
atexit(SDL_Quit);
SDL_Surface *ecran = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE|SDL_DOUBLEBUF);
Warrior link = Warrior();
done = false;
while (!done)
{
SDL_Event event;
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
done = true;
break;
case SDL_KEYDOWN:
{
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
done = true;
break;
case SDLK_DOWN:
link.setPos(2, 0);
break;
case SDLK_UP:
link.setPos(-2, 0);
break;
}
break;
}
}
}
SDL_FillRect(ecran, 0, SDL_MapRGB(ecran->format, 255, 255, 255));
SDL_BlitSurface(link.getSurface(), &(link.getSize()), ecran, &(link.getPos()));
SDL_Flip(ecran);
}
printf("Programme terminee avec succes\n");
return 0;
} |
classes.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <iostream>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
class Warrior
{
public:
Warrior();
Warrior& setPos(int x, int y);
SDL_Rect getPos();
SDL_Rect getSize();
SDL_Surface* getSurface();
private:
SDL_Rect pos;
SDL_Rect size;
SDL_Surface* surf;
int dir;
/* 0 = bas; 1 = haut; 2 = droite; 3 = gauche;*/
}; |
classes.cpp
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
| #include "classes.h"
Warrior::Warrior()
{
pos.x = 640/2 - 32/2;
pos.y = 480/2 - 32/2;
size.x = 0;
size.w = 30;
surf = IMG_Load("../link.gif");
dir = 0;
}
Warrior& Warrior::setPos(int x, int y)
{
pos.x += x;
pos.y += y;
return *this;
}
SDL_Rect Warrior::getPos()
{
return pos;
}
SDL_Rect Warrior::getSize()
{
return size;
}
SDL_Surface* Warrior::getSurface()
{
return surf;
} |
Je ne vois vraiment pas où est le problème... pourquoi j'ai toujours des ennuis avec les classes :(...
Merci d'avance.