Ik heb al een tijd lang een klein spel zitten maken met behulp van de Allegro library. Ik ben er achter gekomen dat die, hoewel gebruikersvriendelijk, erg sloom is. Daarom ben ik overgestapt naar SDL. Ik ben op het volgende probleempje gestuit: in Allegro had ik 'colorcomparison' (bv. if( getpixel(b,x,y) == makecol(0,0,0) { ... } ) maar ik kan dit niet in SDL omzetten. Ik had op internet de volgende getpixel() gevonden, want die zit niet inbegrepen in de SDL library:
Ik heb geprobeerd de vergelijking
Maar die returnt, zo bleek daarna, altijd true, ook al waren het compleet andere kleuren.
Is er een andere manier? Helpmij, s.v.p.
Vriendelijke groet en bij voorbaat dank, Erik.
Code:
Uint32 getpixel(SDL_Surface *surface, int x, int y)
{
int bpp = surface->format->BytesPerPixel;
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;
}
}
Ik heb geprobeerd de vergelijking
Code:
if( getpixel( screen, x, y ) == SDL_MapRGB( f1, f2, f3 ) ) {...}
Maar die returnt, zo bleek daarna, altijd true, ook al waren het compleet andere kleuren.
Is er een andere manier? Helpmij, s.v.p.
Vriendelijke groet en bij voorbaat dank, Erik.