Forum: SDL hjälp

Forum huvudsida -> Programmering -> SDL hjälp

Sidor: 1

Till botten

supermario89 21:39 - 7:e Mars 2006 | Post #1
Medlem
Inlägg: 12


Skicka PM
Jag håller på och gör ett Pong spel i C++ med hjälp av SDL, det är långt ifrån klart, och jag har en liten fråga bara, när jag flyttar bilder syns de på det förra stället de var på, hur gör man för att förhindra detta?
  1.  
  2. #include <SDL/SDL.h>
  3. #include <iostream>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. void DrawALL();
  9. void Moveball();
  10. void collision();
  11.  
  12. int player1x = 20;
  13. int player1y = 280;
  14. int player2x = 764;
  15. int player2y = 280;
  16. int ballx = 394;
  17. int bally = 294;
  18. int ballspeedx = 3;
  19. int ballspeedy =3;
  20.  
  21.  
  22. SDL_Event poolevent;
  23. SDL_Event event;
  24. SDL_Surface * screen;
  25. SDL_Surface * player1=SDL_LoadBMP("player1.BMP");
  26. SDL_Surface * player2=SDL_LoadBMP("player1.BMP");
  27. SDL_Surface * ball=SDL_LoadBMP("ball.BMP");
  28.  
  29.  
  30.  
  31. void DrawIMG(SDL_Surface *img, int x, int y)
  32. {
  33. SDL_Rect dest;
  34. dest.x = x;
  35. dest.y = y;
  36. SDL_BlitSurface(img, NULL, screen, &dest);
  37. SDL_Flip(screen);
  38. }
  39.  
  40.  
  41.  
  42. int main( int argc, char *arcv[])
  43. {
  44. if( SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO) < 0 )
  45. {
  46. std::cout<<"ERROR INITILASING SDL!" <<std::endl<<"Reason: "<<SDL_GetError();
  47. exit(1);
  48. }
  49. atexit(SDL_Quit);
  50. screen=SDL_SetVideoMode(800,600,32,SDL_SWSURFACE|SDL_HWPALETTE);
  51. if(screen == NULL)
  52. {
  53. std::cout<<"ERROR SETTING 800x600x32 VIDEO!"<<std::endl<<"Reason: "<<SDL_GetError();
  54. exit(1);
  55. }
  56. while(1)
  57. {
  58. DrawALL();
  59. Moveball();
  60. collision();
  61. SDL_Event event;
  62. Uint8* keys;
  63. while( SDL_PollEvent(&event) )
  64. {
  65. if(event.type == SDL_QUIT) { return 0; }
  66. if(event.type == SDL_KEYDOWN)
  67. {
  68. if(event.key.keysym.sym==SDLK_ESCAPE) { return 0; }
  69. }
  70. }
  71. keys = SDL_GetKeyState(NULL);
  72.  
  73. if ( keys[SDLK_UP] && player1y >= 0 )
  74. {
  75. player1y -= 2;
  76. }
  77. if ( keys[SDLK_DOWN] && player1y <= 540 )
  78. {
  79. player1y += 2;
  80. }
  81. }
  82. }
  83.  
  84. void DrawALL()
  85. {
  86. DrawIMG(player1, player1x, player1y);
  87. DrawIMG(player2, player2x, player2y);
  88. DrawIMG(ball, ballx, bally);
  89. }
  90. void Moveball()
  91. {
  92. ballx = ballx - ballspeedx;
  93. bally = bally - ballspeedy;
  94. DrawALL();
  95. }
  96. void collision()
  97. {
  98. if (bally < 0)
  99. {
  100. ballspeedy = -3;
  101. }
  102. if (bally > 590)
  103. {
  104. ballspeedy = 3;
  105. }
  106. if (ballx < 0)
  107. {
  108. ballspeedx = -3;
  109. }
  110. if (ballx > 790)
  111. {
  112. ballspeedx = 3;
  113. }
  114. if (ballx > player1x && ballx < player1x+16 && bally > player1y && bally < player1y +60)
  115. {
  116. ballspeedx = -ballspeedx;
  117. ballspeedy = ballspeedy;
  118. }
  119. if (ballx > player2x-16 && ballx < player2x+32 && bally > player2y && bally < player2y+60)
  120. {
  121. ballspeedx = -ballspeedx;
  122. ballspeedy = ballspeedy;
  123. }
  124. }


-------------------------
Ingen signatur!



Independence 22:02 - 7:e Mars 2006 | Post #2
Administratör
Inlägg: 1800


Skicka PM
Du får helt enkelt rita om bakgrunden ovanpå alltihopa så syns inte de gamla positionerna av brickorna, och sedan ritar du de nya positionerna ovanpå det hela.

-------------------------

Vi är riddarna som säger fiskbulle!





supermario89 22:20 - 7:e Mars 2006 | Post #3
Medlem
Inlägg: 12


Skicka PM
Hmm det tycks inte funka, jag la till

DrawIMG(screen, 0, 0);

i DrawALL(); funkationen men det blev ingen skilnad..

-------------------------
Ingen signatur!



Independence 22:25 - 7:e Mars 2006 | Post #4
Administratör
Inlägg: 1800


Skicka PM
Mja, det du gjorde nu var att rita det som är på skärmen till skärmen. Du behöver rita en bakgrund, ta en svart fyrkant eller nåt om du inte har någon riktig bakgrund.

-------------------------

Vi är riddarna som säger fiskbulle!





supermario89 22:31 - 7:e Mars 2006 | Post #5
Medlem
Inlägg: 12


Skicka PM
Jaha! Så jag ska ha nåt som bakgrund och rita ut det med de andra bilderna?

-------------------------
Ingen signatur!



Nissebosselasse 08:38 - 8:e Mars 2006 | Post #6
Medlem
Inlägg: 490


Skicka PM
Jag försökte kompilera koden igår i MSVC++ 6, men det gick nada. Kanske var det för att jag trött (antagligen, hade bakat bullar Smiley ).

Men det jag reagerar på är SDL_Flip inuti DrawIMG; den "flippar" skärmen efter varje figur som ritas ut? ,,r det inte bättre att rita ut alla som ska ritas, och "flippa" till sist? Exempelvis flytta SDL_Flip från DrawIMG, till sista raden i DrawALL.

-------------------------
http://pushingcows.se
Gula Nallen



supermario89 18:52 - 8:e Mars 2006 | Post #7
Medlem
Inlägg: 12


Skicka PM
Tack Nissebosselasse! När jag gjorde så blev spelet mycket snabbare Smiley
(Behöver ingen mer hjälp nu, jag fick det att funka)

-------------------------
Ingen signatur!

Senast redigerad 19:16 - 8:e Mars 2006


Sidor: 1

Forum huvudsida -> Programmering -> SDL hjälp
Atom feed

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