ʹÓÃSDL´òÔìÓÎÏ·ÊÀ½çÖ®ÈëÃÅÆª - ͼÎÄ

2026/1/22 21:04:02

½¨ÒéʹÓÃSDL_HWSURFACE | SDL_DOUBLEBUF£¬Èç¹û³öÏÖ´íÎó¿ÉÒÔ³¢ÊÔʹÓÃSDL_SWSURFACE¡£

SDL_SetVideoModeÈç¹û²Ù×÷³É¹¦£¬Ôò·µ»ØÒ»¸öÖ¸ÏòSDL_SurfaceµÄÖ¸Õ룬·ñÔòµÄ»°·µ»ØNULL¡£¿ÉÒÔʹÓÃÈçÏÂÓï¾ä¼ì²é·¢ÉúµÄ´íÎó£º

If ( screen == NULL ) { printf(¡°Unable to set 640x480 video: %s\\n¡±, SDL_GetError()); return 1; }

ÒÔÉϽéÉÜÁËÈçºÎ¶ÔSDL½øÐгõʼ»¯£¬ÏÂÃæ¿ÉÒÔ¿ªÊ¼»æÖÆÁË¡£µ«ÊÇ»¹ÓÐһЩÐèҪעÒâµÄ¹Ø¼üµØ·½£¬Ê×ÏÈÊÇһЩSDLʹÓõÄÈÝÒ×ÈÃÈ˲úÉúÃÔ»óµÄÊý¾ÝÀàÐÍ£º

Uint8 ¨C Ï൱ÓÚunsigned char Uint16 ¨C 16λ(2×Ö½Ú) unsigned integer Uint32 ¨C 32λ(4×Ö½Ú) unsigned integer Uint64 - 64λ(8×Ö½Ú) unsigned integer Sint8 ¨C Ï൱ÓÚsigned char Sint16 ¨C 16λ(2×Ö½Ú) signed integer Sint32 ¨C 32λ(4×Ö½Ú) signed integer Sint64 - 64λ(8×Ö½Ú) signed integer

»¹ÓУ¬ÓеÄʱºòÈç¹û³õʼ»¯³öÏÖ´íÎó£¬Ã»±ØÒªÍêÈ«Í˳ö¡£ÀýÈçµ±³õʼ»¯ÁËSDL_INIT_VIDEO¶øÃ»Óгõʼ»¯SDL_INIT_AUDIO£¬ÄÇôÄã¿É ÒÔ¼ÌÐøÕâ¸ö´íÎóÖ»ÊÇûÓÐÒôƵ¶øÒÑ¡£Òª¼ì²éÊÇ·ñÒôƵ³õʼ»¯ÊÇ·ñ³É¹¦£¬¿ÉÒÔʹÓÃSDL_WasInit()º¯ÊýÀ´¼ì²é¡£ÏÂÃæÊÇÒ»¸öÀý×Ó£º

Uint32 init = SDL_WasInit(SDL_INIT_AUDIO); If (init & SDL_INIT_AUDIO) { sound = 1; } else { sound = 0; }

Äã¿ÉÒÔÔÚ³ÌÐò³õʼ»¯µÄijЩµØ·½¼ÓÈëÒÔÉÏÓï¾ä¡£

ÒÔÏÂÊÇSDL½éÉÜÖнøÐÐÏóËØ»æÖƵÄÓï¾ä£¬¿ÉÒÔÔÝʱ²»ÐèÒªÍêÈ«Á˽âÆäÖеÄÒâ˼£º

void DrawPixel(SDL_Surface *screen, int x, int y, Uint8 R, Uint8 G, Uint8 B) { Uint32 color = SDL_MapRGB(screen->format, R, G, B); switch (screen->format->BytesPerPixel) { case 1: // Assuming 8-bpp { Uint8 *bufp; bufp = (Uint8 *)screen->pixels + y*screen->pitch + x; *bufp = color; } break; case 2: // Probably 15-bpp or 16-bpp { Uint16 *bufp; bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x; *bufp = color; } break; case 3: // Slow 24-bpp mode, usually not used { Uint8 *bufp; bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 3; if(SDL_BYTEORDER == SDL_LIL_ENDIAN) { bufp[0] = color; bufp[1] = color >> 8; bufp[2] = color >> 16; } else{ bufp[2] = color; bufp[1] = color >> 8; bufp[0] = color >> 16; } } break; case 4: // Probably 32-bpp { Uint32 *bufp; bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x; *bufp = color; } break; } }

ͨ¹ýÕâ¸öº¯Êý£¬¿ÉÒÔ´«µÝ¸øsurfaceÒª»æÖƵĵãµÄ(x,y)×ø±êºÍRGBÖµ¡£

ͬʱ£¬ÓÉÓÚ»æÖÆµÄÆÁÄ»²»ÄÜͬʱ½ÓÊÜÁ½¸öº¯ÊýµÄͬʱ²Ù×÷£¬ÎÒÃÇÐèÒªÆäËûÁ½¸ö¸¨Öúº¯Êý£¬ÓÃÓÚÔÚ»æÖÆÇ°¶ÔÆÁÄ»½øÐÐËø¶¨£¬ÒÔ¼°ÔÚ»æÖÆÍê³ÉÖ®ºó½â³ýËø¶¨¡£ÕâÁ½¸ö¹¤×÷ Ò»°ãÓÉSDL_MUSTLOK(SDL_Surface *screen)ºÍSDL_UnlockSurface(SDL_Surface *screen)Íê³É¡£Ê¹ÓÃÈçÏÂÁ½¸ö×Ô¶¨ÒåµÄº¯Êý»á¸ü¼Ó¼òµ¥£º

void Slock(SDL_Surface *screen) { if ( SDL_MUSTLOCK(screen) ) { if ( SDL_LockSurface(screen) < 0 ) { return; } } } void Sulock(SDL_Surface *screen) { if ( SDL_MUSTLOCK(screen) ) { SDL_UnlockSurface(screen); } }

ÕâÑù£¬ÎÒÃÇ¿ÉÒԵõ½Ò»¸ö¼òµ¥µÄÖ÷³ÌÐò¿ò¼ÜÈçÏ£º

#include #include #include \ // The functions are not shown to save space void DrawPixel(SDL_Surface *screen, int x, int y, Uint8 R, Uint8 G, Uint8 B); void Slock(SDL_Surface *screen); void Sulock(SDL_Surface *screen); int main(int argc, char *argv[]) { if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) { printf(\exit(1); } atexit(SDL_Quit); SDL_Surface *screen; screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF); if ( screen == NULL ) { printf(\exit(1); } // DRAWING GOES HERE return 0; }


ʹÓÃSDL´òÔìÓÎÏ·ÊÀ½çÖ®ÈëÃÅÆª - ͼÎÄ.doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ
ËÑË÷¸ü¶à¹ØÓÚ£º ʹÓÃSDL´òÔìÓÎÏ·ÊÀ½çÖ®ÈëÃÅÆª - ͼÎÄ µÄÎĵµ
Ïà¹ØÍÆ¼ö
Ïà¹ØÔĶÁ
¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÏÂÔØ±¾ÎĵµÐèÒªÖ§¸¶ 10 Ôª

Ö§¸¶·½Ê½£º

¿ªÍ¨VIP°üÔ»áÔ± ÌØ¼Û£º29Ôª/ÔÂ

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºxuecool-com QQ£º370150219