Forum: SDL

Forum huvudsida -> Programmering -> SDL

Sidor: 1

Till botten

jackesa 03:39 - 2:a Januari 2009 | Post #1
Medlem
Inlägg: 4


Skicka PM
Någon som vet varför skärmen rensar sig själv efter varje utritad boll? Jag hade tänkt att implementera det sedan, men det löstes på något sättSmiley

Så här ser koden ut

  1. void Displayboll(SDL_Surface *des, SDL_Surface *img, double x, double y)
  2. {
  3. SDL_Rect rect;
  4. rect.x = x;
  5. rect.y = y;
  6. rect.w = img->w;
  7. rect.h = img->h;
  8.  
  9. SDL_BlitSurface(img, NULL , des, &rect);
  10. }
  11.  
  12. int main(int argc, char *argv[])
  13. {
  14. atexit(SDL_Quit);
  15. SDL_Surface *screen;
  16. SDL_Init(SDL_INIT_VIDEO);
  17. screen = SDL_SetVideoMode(1200, 900, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
  18.  
  19. SDL_Surface *boll;
  20. boll = SDL_LoadBMP("boll.bmp");
  21.  
  22. //Bollen placeras i mitten
  23. double bollX = (screen->w-boll->w)/2, bollY = (screen->h-boll->h)/2;
  24. Displayboll(screen, boll, (screen->w-boll->w)/2 , (screen->h-boll->h)/2);
  25. SDL_Flip(screen);
  26.  
  27.  
  28. SDL_Event eventet;
  29.  
  30. int limit=1;
  31. srand (time(NULL));
  32. while(1)
  33. {
  34.  
  35. int x=rand() % 3 - limit; //Slumpar ett nummer mellan -1 & 1
  36. int y=rand() % 3 - limit;
  37.  
  38. bollX += x;
  39. bollY += y;
  40.  
  41. //Gör att bollen håller sig inom fönstret (Någon som vet ett effektivare sätt?)
  42. if (bollX==0)
  43. bollX=1;
  44. if (bollX==screen->w-boll->w)
  45. bollX=screen->w-boll->w-limit;
  46.  
  47. if (bollY==0)
  48. bollY=1;
  49. if (bollY==screen->h-boll->h)
  50. bollY=screen->h-boll->h-limit;
  51.  
  52.  
  53. Displayboll(screen, boll, bollX, bollY);
  54. SDL_Flip(screen);
  55.  
  56.  
  57.  
  58. SDL_PollEvent(&eventet);
  59.  
  60. switch(eventet.type)
  61. {
  62. case SDL_QUIT:
  63. cout << "Programmet stangs av..." << endl;
  64. SDL_Quit();
  65. return 0;
  66.  
  67. case SDL_KEYDOWN:
  68. Uint8 *keys;
  69.  
  70. keys = SDL_GetKeyState(NULL);
  71. if(keys[SDLK_ESCAPE])
  72. SDL_Quit();
  73. }
  74.  
  75. }
  76.  
  77. return 0;
  78. }
Smiley Smiley Smiley Smiley




Slash 12:26 - 2:a Januari 2009 | Post #2
Medlem
Inlägg: 141


Skicka PM
Kan det vara så att du har en liten border på din bild. Eftersom den bara rör sig en pixel så räcker det men en border på 1 pixel runt själva bollen för att den ska ritas över.

-------------------------
Ingen sigantur!



jackesa 21:11 - 2:a Januari 2009 | Post #3
Medlem
Inlägg: 4


Skicka PM
aa det är en border runt, men bollavtrycken borde ju fortfarande vara kvar när den rört sig över hela skärmen?




Larrxi 16:12 - 3:e Januari 2009 | Post #4
Medlem
Inlägg: 3


Skicka PM
Nej, för det enda som är kvar på skärmen är bordern som suddat ut allt annat.

-------------------------
1 + 1 = 2



jackesa 18:21 - 4:e Januari 2009 | Post #5
Medlem
Inlägg: 4


Skicka PM
true that, tack!




Sidor: 1

Forum huvudsida -> Programmering -> SDL
Atom feed

Du får inte posta i den här tråden | Till toppen