amigos: 
busco ayuda estoy utilizando un tutorial para aprender a utilizar SDL. 
pero tengo un problema con este ejemplo: 
y me bota un error. 
el tutorial que sigo es este: 
http://www.losersjuegos.com.ar/referenc ... %20SDL.pdf 
pagina 84 
me podrian ayudar. 
gracias 
la clase csprite.h que utilizo es esta: 
#ifndef CSPRITE_H_ 
#define CSPRITE_H_ 
#define TRUE 1 
#define FALSE 0 
// CFrame representa un frame independiente de un sprite. 
class CFrame { 
public: 
SDL_Surface *img; 
void load(char *path); 
void unload(); 
}; 
// La clase CSprite está formada por un array de frames; 
class CSprite { 
private: 
int posx,posy; 
int estado; 
int nframes; 
int cont; 
public: 
CFrame *sprite; 
CSprite(int nf); 
CSprite(); 
void finalize(); 
void addframe(CFrame frame); 
void selframe(int nf); 
int frames() {return cont;} 
void setx(int x) {posx=x;} 
void sety(int y) {posy=y;} 
void addx(int c) {posx+=c;} 
void addy(int c) {posy+=c;} 
int getx() {return posx;} 
int gety() {return posy;} 
int getw() {return sprite[estado].img->w;} 
int geth() {return sprite[estado].img->h;} 
void draw(SDL_Surface *superficie); 
int colision(CSprite sp); 
}; 
#endif /* CSPRITE_H_ */ 
el primer cpp es este el otro esta abajo que es el que me interesa: 
#include <SDL.h> 
#include <csprite.h> 
// Sprite Class implementation 
void CFrame::load(char *path) { 
img=SDL_LoadBMP(path); 
// Asignamos el color transparente al color rojo. 
SDL_SetColorKey(img,SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(img->format,255,0,0)); 
img=SDL_DisplayFormat(img); 
} 
void CFrame::unload(){ 
SDL_FreeSurface(img); 
} 
CSprite::CSprite(int nf) { 
sprite=new CFrame[nf]; 
nframes=nf; 
cont=0; 
} 
CSprite::CSprite() { 
int nf=1; 
sprite=new CFrame[nf]; 
nframes=nf; 
cont=0; 
} 
void CSprite::finalize() { 
int i; 
for (i=0 ; i<=nframes-1 ; i++) 
sprite[i].unload(); 
} 
void CSprite::addframe(CFrame frame) { 
if (cont<nframes) { 
sprite[cont]=frame; 
cont++; 
} 
} 
void CSprite::selframe(int nf) { 
if (nf<=nframes) { 
estado=nf; 
} 
} 
void CSprite::draw(SDL_Surface *superficie) { 
SDL_Rect dest; 
dest.x=posx; 
dest.y=posy; 
SDL_BlitSurface(sprite[estado].img,NULL,superficie,&dest); 
} 
int CSprite::colision(CSprite sp) { 
int w1,h1,w2,h2,x1,y1,x2,y2; 
w1=getw(); // ancho del sprite1 
h1=geth(); // altura del sprite1 
w2=sp.getw(); // ancho del sprite2 
h2=sp.geth(); // alto del sprite2 
x1=getx(); // pos. X del sprite1 
y1=gety(); // pos. Y del sprite1 
x2=sp.getx(); // pos. X del sprite2 
y2=sp.gety(); // pos. Y del sprite2 
if (((x1+w1)>x2)&&((y1+h1)>y2)&&((x2+w2)>x1)&&((y2+h2)>y1)) { 
return TRUE; 
} else { 
return FALSE; 
} 
} 
el segundo cpp es este: 
#include <stdio.h> 
#include <stdlib.h> 
#include <SDL.h> 
#include <csprite.h> 
SDL_Surface *screen; 
CFrame fnave; 
CFrame fmalo; 
CSprite nave(1); 
CSprite malo(1); 
SDL_Rect rectangulo; 
SDL_Joystick *joystick; 
int joyx, joyy; 
int done=0; 
// estructura que contiene la información 
// de nuestro avión 
struct minave { 
int x,y; 
} jugador; 
// Estructura que contiene información 
// del avión enemigo 
struct naveenemiga { 
int x,y; 
} enemigo; 
// Dibuja los esprites en la pantalla 
void DrawScene(SDL_Surface *screen) { 
// borramos el avión dibujado 
// en el frame anterior 
rectangulo.x=nave.getx(); 
rectangulo.y=nave.gety(); 
rectangulo.w=nave.getw(); 
rectangulo.h=nave.geth(); 
SDL_FillRect(screen,&rectangulo,SDL_MapRGB(screen->format,0,0,0)); 
// dibuja avión 
nave.setx(jugador.x); 
nave.sety(jugador.y); 
nave.draw(screen); 
// Dibuja enemigo 
malo.setx(enemigo.x); 
malo.sety(enemigo.y); 
malo.draw(screen); 
// ¿ha colisionado con la nave? 
if (malo.colision(nave) == TRUE) { 
done=1; 
} 
// Mostramos todo el frame 
SDL_Flip(screen); 
} 
// Inicializamos estados 
void inicializa() { 
jugador.x=300; 
jugador.y=300; 
enemigo.x=100; 
enemigo.y=100; 
} 
void finaliza() { 
// finalizamos los sprites 
nave.finalize(); 
malo.finalize(); 
// cerramos el joystick 
if (SDL_JoystickOpened(0)) { 
SDL_JoystickClose(joystick); 
} 
} 
// Preparamos los esprites 
int InitSprites() { 
fnave.load("minave.bmp"); 
nave.addframe(fnave); 
fmalo.load("nave.bmp"); 
malo.addframe(fmalo); 
return 0; 
} 
int main(int argc, char *argv[]) { 
SDL_Event event; 
Uint8 *keys; 
if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0) { 
printf("No se pudo iniciar SDL: %s\n",SDL_GetError()); 
return 1; 
} 
screen = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE); 
if (screen == NULL) { 
printf("No se puede inicializar el modo gráfico: \n",SDL_GetError()); 
return 1; 
} 
atexit(SDL_Quit); 
inicializa(); 
InitSprites(); 
while (done == 0) { 
// dibujamos el frame 
DrawScene(screen); 
// consultamos el estado del teclado 
keys=SDL_GetKeyState(NULL); 
// consultamos el estado del joystick 
SDL_JoystickUpdate(); 
joyx = SDL_JoystickGetAxis(joystick, 0); 
joyy = SDL_JoystickGetAxis(joystick, 1); 
if ((keys[SDLK_UP] || joyy < -10) && (jugador.y > 0)) {jugador.y=jugador.y-(5);} 
if ((keys[SDLK_DOWN] || joyy > 10) && (jugador.y < 460)) {jugador.y=jugador.y+(5);} 
if ((keys[SDLK_LEFT] || joyx < -10) && (jugador.x > 0)) {jugador.x=jugador.x-(5);} 
if ((keys[SDLK_RIGHT] || joyx > 10) && (jugador.x < 620)) {jugador.x=jugador.x+(5);} 
while (SDL_PollEvent(&event)) { 
if (event.type == SDL_QUIT) {done=1;} 
if (event.type == SDL_KEYDOWN || event.type == SDL_JOYBUTTONDOWN) { 
if (event.key.keysym.sym == SDLK_ESCAPE) { 
done=1; 
} 
} 
} 
} 
finaliza(); 
return 0; 
}
			

