voila je suis encore qu'un débutant dans la matière avec la POO et j'apprend a utiliser SDL
j'ai fait un essai en affichant un image et avec unn SDL_rect qui limite l'affichage de limage, juste un partie:
exemple:
SDL_BlitSurface(image, &rect, screen, NULL);
avec un rect assez petit.
donc a partir de ca je voulais faire un truc plus élaboré avec SDL et des classes
et j'ai fait ça et ca n'affiche pas l'image.
Donc est ce que quelqu'un pourait m'expliquer ce qui n va pas ?
Merci
les codes sources:
SDL.cpp:
#include <stdlib.h>
#include <SDL/SDL.h>
#include "perso.h"
SDL_Surface *LoadBMP(const char *filename);
int main(int argc, char *argv[])
{
perso *ryu;
SDL_Surface *screen, *image;
SDL_Event event;
bool done = false;
if(SDL_Init(SDL_INIT_VIDEO) == -1)
{
printf("Can't init SDL: %s\n", SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
if(screen == NULL)
{
printf("Can't set video mode: %s\n", SDL_GetError());
exit(1);
}
image = LoadBMP("sprite.bmp");
ryu = new perso(image);
if(image == NULL)
{
printf("Can't load image of tux: %s\n", SDL_GetError());
exit(1);
}
ryu->DrawSprite2(screen);
SDL_FreeSurface(image);
SDL_UpdateRect(screen, 0, 0, 0, 0);
while(!done)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
done = true;
break;
}
}
}
delete ryu;
return 0;
}
SDL_Surface *LoadBMP(const char *filename)
{
SDL_Surface *temp, *image1;
temp = SDL_LoadBMP(filename);
image1 = SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);
return image1;
}
perso.h:
#ifndef __perso_h__
#define __perso_h__
#include <SDL/SDL.h>
#include "const.h"
class perso
{
public:
perso(SDL_Surface *planche_sprite);
void SetImage(SDL_Surface *planche_sprite);
void DrawSprite1(SDL_Surface *target);
void DrawSprite2(SDL_Surface *target);
void DrawSprite3(SDL_Surface *target);
void PosRect(SDL_Rect rect, int x, int y);
protected:
SDL_Surface *image;
SDL_Rect rectH1, rectH2, rectH3, rectB1, rectB2, rectB3,
rectD1, rectD2, rectD3, rectG1, rectG2, rectG3;
};
#endif
perso.cpp :
#include "perso.h"
perso::perso(SDL_Surface *planche_sprite)
{
SetImage(planche_sprite);
PosRect(rectH1, largeur_sprite+1, 0);
PosRect(rectH2, 0, 0);
PosRect(rectH3, largeur_sprite*2+1, 0);
}
void perso::SetImage(SDL_Surface *planche_sprite)
{
image =
planche_sprite;
}
void perso::DrawSprite1(SDL_Surface *target)
{
SDL_BlitSurface(image,
&rectH1, target,
NULL);
}
void perso::DrawSprite2(SDL_Surface *target)
{
SDL_BlitSurface(image,
&rectH2, target,
NULL);
}
void perso::DrawSprite3(SDL_Surface *target)
{
SDL_BlitSurface(image,
&rectH3, target,
NULL);
}
void perso::PosRect(SDL_Rect rect, int x, int y)
{
rect.x = x;
rect.y = y;
rect.w = largeur_sprite;
rect.h = hauteur_sprite;
}
et pour finir
const.h:
#ifndef __def_h__
#define __def_h__
const int largeur_sprite = 24;
const int hauteur_sprite = 32;
#endif
voila :) Merci d'avance:)