Buenas, siento molestarles de nuevo, pero tengo mas problemas en tiempo de ejecución que no se abordar, :(
Os copio la parte del codigo que falla:
SS2DL.h
class Frame
{
public:
SDL_Surface *frame;
SDL_Surface *InitFrame;
void FUnLoad();
void FLoad(char *path, int x, int y, int h, int w);
};
SS2DL.cpp
void Frame::FLoad(char *path, int x, int y, int h, int w)
{
SDL_Rect inicio;
inicio.x = x;
inicio.y = y;
inicio.h = h;
inicio.w = w;
InitFrame = IMG_Load(path);
SDL_BlitSurface(InitFrame, &inicio, frame, NULL); ------------------------> Aqui falla, access violation
SDL_SetColorKey(frame, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(frame->format,255,0,0));
frame = SDL_DisplayFormat(frame);
}
Puede que sea una chorrada pero llevo dos horas dandole vueltas.
Gracias de antemano
Un saludo
Cuando haces el "blit", frame aun no ha sido inicializado.
Como inicializado? frame es una superficie, y se inicia en SDL_Surface *frame; no? si no es asi corregidme please.
Un saludo
Cita de: "AlexHdez"Como inicializado? frame es una superficie, y se inicia en SDL_Surface *frame; no? si no es asi corregidme please.
Fíjate que no es del tipo SDL_Surface, si no un PUNTERO a SDL_Surface.
Con eso lo único que haces es declarar un puntero. Ese puntero puede valer NULL o CUALQUIER COSA, pero no apuntará a nada válido y, mucho menos, a una SDL_Surface.
Las superficies en SDL (si no me falla la memoria) se crean con SDL_CreateSurface(....).
void Frame::FLoad(char *path, int x, int y, int h, int w)
{
SDL_Rect inicio;
inicio.x = x;
inicio.y = y;
inicio.h = h;
inicio.w = w;
InitFrame = IMG_Load(path);
frame = SDL_CreateRGBSurface(SDL_HWSURFACE, w, h, 8, 0, 0, 0, 0);
SDL_BlitSurface(InitFrame, &inicio, frame, NULL); ------------------------> Aqui falla, access violation
SDL_SetColorKey(frame, SDL_SRCCOLORKEY | SDL_RLEACCEL, SDL_MapRGB(frame->format,255,0,0));
frame = SDL_DisplayFormat(frame);
}
Sigue dando error, :S
Vale ya esta el error ya no esta en esa parte del codigo, sorry y muchas gracias!
Ok (ole)