Pong in SDL
I was at cone3d.gamedev.net trying to get bitmaps to load for my pong game I''m currently making....but can''t seem to get it to work. I can use it''s source, compile, and it''ll work. If I do it myself, it won''t work. Does anyone know what to do?
#include <stdio.h>#include <stdlib.h>#include <SDL/SDL.h>SDL_Surface *image;SDL_Surface *screen;SDL_Surface *lod;void DrawPixel(SDL_Surface *lod, int x, int y, Uint8 R, Uint8 G, Uint8 B);void Slock(SDL_Surface *lod){ if ( SDL_MUSTLOCK(lod) ) { if ( SDL_LockSurface(lod) < 0 ) { return; } }}void Sulock(SDL_Surface *lod){ if ( SDL_MUSTLOCK(lod) ) { SDL_UnlockSurface(lod); }}void DrawPixel(SDL_Surface *lod, int x, int y, Uint8 R, Uint8 G, Uint8 B){ Uint32 color = SDL_MapRGB(lod->format, R, G, B); switch (lod->format->BytesPerPixel) { case 1: // Assuming 8-bpp { Uint8 *bufp; bufp = (Uint8 *)lod->pixels + y*lod->pitch + x; *bufp = color; } break; case 2: // Probably 15-bpp or 16-bpp { Uint16 *bufp; bufp = (Uint16 *)lod->pixels + y*lod->pitch/2 + x; *bufp = color; } break; case 3: // Slow 24-bpp mode, usually not used { Uint8 *bufp; bufp = (Uint8 *)lod->pixels + y*lod->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 *)lod->pixels + y*lod->pitch/4 + x; *bufp = color; } break; }}void DrawScene(SDL_Surface *lod){ Slock(lod); for(int x=0;x<640;x++) { for(int y=0;y<480;y++) { DrawPixel(lod, x,y,y/2,y/2,x/3); } } Sulock(lod); SDL_Flip(lod);}int xpos=0,ypos=0;int InitImages(){ image = SDL_LoadBMP("Image1.bmp"); return 0;}int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);void DrawIMG(SDL_Surface *img, int x, int y){ SDL_Rect dest; dest.x = 0; dest.y = 0; SDL_BlitSurface(img, NULL, screen, &dest);}void DrawScene(){ DrawIMG(image, xpos, ypos); SDL_Flip(screen);}int main(int argc, char *argv[]){ Uint8* keys; if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) { printf("Unable to load SDL: %s\n", SDL_GetError()); exit(1); } atexit(SDL_Quit); screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF); if ( screen == NULL ) { printf("Unable to set 640x480 video: %s\n", SDL_GetError()); exit(1); }InitImages(); int done=0; while(done == 0) { SDL_Event event; while ( SDL_PollEvent(&event) ) { if ( event.type == SDL_QUIT ) { done = 1; } if ( event.type == SDL_KEYDOWN ) { if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; } } }keys = SDL_GetKeyState(NULL); if ( keys[SDLK_UP] ) { ypos -= 1; } if ( keys[SDLK_DOWN] ) { ypos += 1; } if ( keys[SDLK_LEFT] ) { xpos -= 1; } if ( keys[SDLK_RIGHT] ) { xpos += 1; } DrawScene(); }return 0;}
That''s the source of my program that i''m having problems with
Heres your problem I think, you are putting wrong values into tthe destination rect, you arnt giving it a width or height and are always makign it at the top left, which from the rest of your code I assume you dont want, try this
Ballistic Programs
void DrawIMG(SDL_Surface *img, int x, int y){ SDL_Rect dest; dest.x = x; dest.y = y;dest.h = img->h;dest.w = img->w; SDL_BlitSurface(img, NULL, screen, &dest);}
Ballistic Programs
And let me guess, I got to declare the x and y values also....is there a better tutorial place for SDL with BloodShed Dev-C++ besides cone3d.gamedev.net and www.openrpgs.com?
There is one on this site, here.
---
Make it work.
Make it fast.
"Commmmpuuuuterrrr.." --Scotty Star Trek IV:The Voyage Home
---
Make it work.
Make it fast.
"Commmmpuuuuterrrr.." --Scotty Star Trek IV:The Voyage Home
Just do what I do. Read the API documentation. SDL really isn''t all that hard, in fact it is much easier than DirectX.
--Baseball isn''''t right. A man can NOT walk with four balls.
--Baseball isn''''t right. A man can NOT walk with four balls.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement