SDL draging

Started by
12 comments, last by The Rug 19 years, 6 months ago
ok when i just make a block move around on the screen it drags and leves a trail of were its just been how do i fix this heres my code tanks [smile] //there is some intialazation befor this static void draw () { SDL_Surface *apple_src; SDL_Surface *wall_src; wall_src = SDL_LoadBMP("wall.bmp"); apple_src = SDL_LoadBMP("apple.bmp"); worm->Worm_Blocks.resize(3); SDL_Rect XYrect; if(event.key.keysym.sym == SDLK_LEFT) X--; if(event.key.keysym.sym == SDLK_RIGHT) { X++; }; XYrect.x =X; SDL_BlitSurface(block_src, NULL, screen, &XYrect); SDL_Flip(screen); } int main (int argc, char *argv[]) { char *msg; int done; /* Initialize SDL */ if (SDL_Init (SDL_INIT_VIDEO) < 0) { asprintf (&msg, "Couldn't initialize SDL: %s\n", SDL_GetError ()); MessageBox (0, msg, "Error", MB_ICONHAND); free (msg); exit (1); } atexit (SDL_Quit); /* Set 640x480 16-bits video mode */ screen = SDL_SetVideoMode (640, 480, 16, SDL_SWSURFACE | SDL_DOUBLEBUF); if (screen == NULL) { asprintf (&msg, "Couldn't set 640x480x16 video mode: %s\n", SDL_GetError ()); MessageBox (0, msg, "Error", MB_ICONHAND); free (msg); exit (2); } SDL_WM_SetCaption ("SDL MultiMedia Application", NULL); done = 0; while (!done) { //SDL_Event event; /* Check for events */ while (SDL_PollEvent (&event)) { switch (event.type) { case SDL_KEYDOWN: break; case SDL_QUIT: done = 1; break; default: break; } } /* Draw to screen */ draw (); } return 0; }; dev-cpp 4.9.9.0 c++ SDL
____________________________"This just in, 9 out of 10 americans agree that 1 out of 10 americans will disagree with the other 9"- Colin Mochrie
Advertisement
You need to clear the surface or draw your paddle on top of a background. It is drawing correctly now. You are just seeing each frame as it was.

Steven Bradley .:Personal Journal:. .:WEBPLATES:. .:CGP Beginners Group:. "Time is our most precious resource yet it is the resource we most often waste." ~ Dr. R.M. Powell
Take a look here:
http://cone3d.gamedev.net/cgi-bin/index.pl?page=tutorials/gfxsdl/tut2
yeah it works now that im drawing on somthing but i have another questoin how do i get smooth key press based moving. how i have it now the block just move when the key is press is there a key down method or somthing of that nature?
____________________________"This just in, 9 out of 10 americans agree that 1 out of 10 americans will disagree with the other 9"- Colin Mochrie
You can check for key state and change a flag to move until the flag is altered again. Basically, key up and down. Toy around with it, I am sure you'll figure it out. Don't you absolutely love programming!
Steven Bradley .:Personal Journal:. .:WEBPLATES:. .:CGP Beginners Group:. "Time is our most precious resource yet it is the resource we most often waste." ~ Dr. R.M. Powell
yeah its totally awsome![smile]
any way one last thing dose SDL have a problem with negative values? im doing somthing like this

 case SDL_KEYDOWN:                 if(event.key.keysym.sym == SDLK_LEFT)                 {                  X=-1;                  Y=0;                    };                      if(event.key.keysym.sym == SDLK_RIGHT)                  {                  X=1;                  Y=0;                   };                    if(event.key.keysym.sym == SDLK_DOWN)                 {                  X=0;                  Y=-1;                    };                      if(event.key.keysym.sym == SDLK_UP)                 {                  X=0;                  Y=1;                    };                              break;   

if(X > 0)    {      XYrect.x +=X;    };    if(X < 0)    {        X = 1;        XYrect.x -=X;    };    if(Y > 0)    {              XYrect.y +=Y;    };    if(Y < 0)    {        Y = 1;        XYrect.y -=Y;      };         SDL_BlitSurface(background,NULL,screen,&rect);      SDL_BlitSurface(block_src, NULL, screen, &XYrect);     SDL_Flip(screen);    

those are just code segmants but can rects store negative numbers because when i run my program

when the left key is pressed i go left
when the right key is pressed i go left
when the down key is pressed i go down
when the up key is pressed i go down
dose this have to do with the negative values im using??
____________________________"This just in, 9 out of 10 americans agree that 1 out of 10 americans will disagree with the other 9"- Colin Mochrie
Adding a negative number to another number, ie.

X=-1;
XYrect.x += X;

is the same as taking the number away.

Try this instead of your second code block:

   if(XYrect.x < 0)      XYrect.x = 0;   if(XYrect.y < 0)      XYrect.y = 0;   XYrect.x +=X;   XYrect.y +=Y;     SDL_BlitSurface(background,NULL,screen,&rect);      SDL_BlitSurface(block_src, NULL, screen, &XYrect);     SDL_Flip(screen);


Apologies if it doesnt work, its nearly 1am here and Ive been staring at sine waves all day :o|
the rug - funpowered.com
i know there the same thing but nether of them work whenever i try and subtract a .x or .y from a rect it dosnt seem to work

and i dont want to reset the .x and .y values to 0 just increment them accordingly
____________________________"This just in, 9 out of 10 americans agree that 1 out of 10 americans will disagree with the other 9"- Colin Mochrie
rects can handle negative numbers in SDL. Not sure what is going on.
Steven Bradley .:Personal Journal:. .:WEBPLATES:. .:CGP Beginners Group:. "Time is our most precious resource yet it is the resource we most often waste." ~ Dr. R.M. Powell
I'm at work so this may not work. Try checking:

Sine you already know that X and Y will only hold 2 possible values, try, if(X == -1) and if(X == 1) instead of checking against zero. (Same applies to Y) Then you don't need to change the values inside the if statement making it false again.

Steven Bradley .:Personal Journal:. .:WEBPLATES:. .:CGP Beginners Group:. "Time is our most precious resource yet it is the resource we most often waste." ~ Dr. R.M. Powell

This topic is closed to new replies.

Advertisement