1 / 13

MAEK GAEM III: SDL

MAEK GAEM III: SDL. Simple DirectMedia Layer Input/Graphics/Audio using OpenGL Not nearly as difficult as OpenGL Cross Platform and Open Sauce Bindings for over 20 languages. Download/Setup. http://www.libsdl.org/download-1.2.php How to get it all set up will depend on your IDE.

lane
Download Presentation

MAEK GAEM III: SDL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MAEK GAEM III: SDL Simple DirectMedia Layer Input/Graphics/Audio using OpenGL Not nearly as difficult as OpenGL Cross Platform and Open Sauce Bindings for over 20 languages

  2. Download/Setup http://www.libsdl.org/download-1.2.php How to get it all set up will depend on your IDE. Once you build your game, you (usually) just need to package it with SDL.dll

  3. Get it Up We have to do some initialization before we can do anything serious SDL_Init( SDL_INIT_VIDEO );That was easy You can initialize a number of subsystems with this method (video, audio, timer, etc.)

  4. Screen Initialization Nearly every video-oriented method using SDL requires passing in a pointer to a surface object. SDL_Surface* screen = SDL_SetVideoMode( WINDOW_WIDTH, WINDOW_HEIGHT, 0, SDL_HWSURFACE | SDL_DOUBLEBUF ); But what does that mean? Firstly, the screen resolution's width and height Then the bits per pixel. Cool! 0 is the current default for the user's computer All the extra flags go last. You can look 'em up

  5. Drawing Boring Rectangles You can fill simple rectangles with color SDL_FillRect(SDL_Surface *dst, SDL_Rect *dstrect, Uint32 color) First arg: Your surface from earlier Second Arg: The Rectangle you where you want to color the screen. NULL will fill the entire screen in Third Arg: Use SDL_MapRGB (or SDL_MapRGBA if you want to do alpha blending). I'll go into detail in a sec.

  6. SDL_MapRGB Uint32 SDL_MapRGB(SDL_PixelFormat *fmt, Uint8 r, Uint8 g, Uint8 b); Last three arguments are pretty obvious. Just enter the Red Green and Blue values (from 0 to 255) to get the color you want. What's this PixelFormat shit? It's an attribute of your screen object. Just pass in a screen->format and you'll be good to go.

  7. Rectangle Elaboration There's not too much to talk about. You need rectangles for drawing to the screen, but you can use them for whatever you want, be it collisions, keeping track of player position, whatever. Make one like this: SDL_Rect rectongle; Has an attribute for x & y position, and width & height rectongle.x = 200; rectongle.y = 30; rectongle.w = 20; rectongle.h = 20;

  8. Fuck Colors, I Want Pictures! You can add textures as surface objects, but load in pictures using SDL_LoadBMP. LoadBMP just takes a filepath. Pretty easy, yeah? Ex: SDL_Surface* pic = SDL_LoadBMP(“poop.bmp”) There's a couple things to do now: Set transparency, and draw it to our surface

  9. Sprite Sheet A spritesheet is a collection of pictures in a single image used in animation to simulate movement. When drawing to the screen, you select a rectangular area on the sheet you wish to draw You should also select a color for the background to make transparent

  10. Transparency Here's How: SDL_SetColorKey(SDL_Surface *surface, Uint32 flag, Uint32 key); As you know by now, pass in the surface pointer Pass in SDL_SRCCOLORKEY to the second arg (const) That just means that the next argument is going to be the color we want to be transparent For the last arg, use MapRGB to pick a transparent color. Pick something that you aren't using in the actual image. Magenta is a common one (RGB 255, 0, 255)

  11. Shit it to the Screen SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect); *src is a pointer to the source surface (your image) and *dst is the desination surface (screen object) *srcrect is the source Rectangle. This is the area inside the image that you want to draw. *dstrect is the destination Rectangle. This is where you want to draw it on the screen

  12. Quick Notes If using doublebuffering, make sure to call SDL_Flip(SDL_Surface* screen) after every time you draw to the screen. This swaps the video buffers. Also call SDL_FreeSurface(SDL_Surface* surface) to cleanup after use. Do this for every surface you create

  13. Input SDL sends KEY_DOWN and KEY_UP events, so here's what we're going to do: SDL_Event event; if (SDL_PollEvent(&event)) //poll for a key event { if (event.type == SDL_KEYDOWN) //if key is pressed or released, handle it { HandleEvent(event); } if (event.type == SDL_KEYUP) { HandleEvent(event); } }

More Related