he creado una funcion que lo que hace es detectar una colision "tosca" entre dos sprites (con los bordes de anchura y altura de cada sprite), pero se quedaba corta para muchas cosas, porque no eran colisiones "reales" entre los contenidos de los bitmaps, asi que le he añadido un modulo de colision "fina" cuando detecta la otra, lo que hace es comprobar si los pixeles del rectangulo que surge de la superposicion de dos sprites son croma o no son croma y si estan superpuestos (colisionando). entonces eso funciona perfectamente, hago cualquier dibujo, le pongo un fondo croma (255,0,0 por ejemplo) y si le paso a la funcion que me detecte solo la colision fina, pues solo me detecta cuando algun color NO CROMA se superpone a un otro color NO CROMA del otro sprite, entonces, con eso funcionando, uso la funcion para quitar el fondo croma (SDL_SetColorKey), que funciona perfectamente, pero cuando los dos sprites entren en contanto (colision burda) da un error la funcion getpixel, en un else de comprobacion de profundidad de color, que supongo que causara conflicto con la profundidad de color del croma.... bueno, un jaleo, aqui os pego la funcion getpixel que es la "oficial" y la linea donde me da el error con su mensaje:
- Código: Seleccionar todo
// Nota, código obtenido del wiki de SDL
// http://www.libsdl.org/cgi/docwiki.cgi/Pixel_20Access
Uint32 getpixel(SDL_Surface *surface, int x, int y)
{
int bpp = surface->format->BytesPerPixel;
/* Here p is the address to the pixel we want to retrieve */
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
switch(bpp) {
case 1:
return *p;
case 2:
return *(Uint16 *)p;
case 3:
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
return p[0] << 16 | p[1] << 8 | p[2];
else
return p[0] | p[1] << 8 | p[2] << 16;
case 4:
return *(Uint32 *)p;
default:
return 0; /* shouldn't happen, but avoids warnings */
}
}
me da error en el else del case 3:
- Código: Seleccionar todo
First-chance exception at 0x004121d1 in colision.exe: 0xC0000005: Access violation reading location 0x00008020.
Unhandled exception at 0x004121d1 in colision.exe: 0xC0000005: Access violation reading location 0x00008020.
este error solo sale cuando empleo la funcion de colorKey, que me funciona perfectamente por lo general. la llamada a la funcion es esta y repito FUNCIONA:
- Código: Seleccionar todo
void CFrame::load(char *path) {
img = IMG_Load(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);
}
espero que alguien pueda ayudarme
muchas gracias por adelantado
atentamente
maije