Forum: Hjälp med ett första program i SDL

Forum huvudsida -> Programmering -> Hjälp med ett första program i SDL

Sidor: 1

Till botten

Jepsson 15:26 - 28:e Januari 2007 | Post #1
Medlem
Inlägg: 7


Skicka PM
Hejsan.

Jag har ganska nyss börjat med SDL och har börjat lätt med ett program där man har en gubbe som man styr på en plan. När jag skulle göra så att man dör om man är när väggarna så fick jag det inte att funka när man åkte in i höger eller nedre vägg, men jag tror att jag kan fixa det.
Men till det riktiga problemet. När man åker in i väggen och dör så visas det en ful bild och sen ska programmet avslutas, men när detta händer så står det att SDL.exe har stött på ett fel och måste avslutas. Varför undrar jag?

Här kommer bilderna till programmet:
http://www.blinkenlights.se/?p=upload&do=download&id=304

Och här koden:
  1.  
  2. #include <SDL/SDL.h>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. int DisplayImageDead(const char*) {
  7. SDL_Surface *screen1;
  8. screen1 = SDL_SetVideoMode(640, 480, 16, 0);
  9. SDL_Surface* image3;
  10. image3 = SDL_LoadBMP("dead.bmp");
  11. SDL_BlitSurface(image3, NULL, screen1, NULL);
  12. SDL_Flip(screen1);
  13. SDL_Delay(3000);
  14. return 0;
  15. }
  16.  
  17. int DisplayImage(SDL_Surface* destination, const char*, int x, int y);
  18.  
  19.  
  20. int main(int argc, char *argv[])
  21. {
  22. SDL_Surface *screen;
  23. // En yta
  24. SDL_Event event;
  25. // Variabel för händelser
  26. int imgX=10,imgY=10, visa;
  27. // Variabler för att hålla reda på vart bilden ska ritas ut
  28. // Initiera SDL
  29. if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 )
  30. {
  31. cout << "Error, unable to initialize SDL: " << SDL_GetError() << endl;
  32. SDL_Quit();
  33. return 1;
  34. }
  35. else
  36. {
  37. cout << "SDL initialized successfully!" << endl;
  38. }
  39. screen = SDL_SetVideoMode(640, 480, 16, 0);
  40. if (screen == NULL)
  41. {
  42. cout << "Unable to set video mode: " << SDL_GetError() << endl;
  43. SDL_Quit();
  44. return 1;
  45. }
  46. else
  47. {
  48. cout << "Successfully set video mode!" << endl;
  49. }
  50. while (1)
  51. {
  52. SDL_PollEvent(&event);
  53. switch (event.type)
  54. {
  55. case SDL_QUIT:
  56. cout << "Terminating program!" << endl;
  57. SDL_Quit();
  58. return 0;
  59. case SDL_KEYDOWN:
  60. Uint8 *keys;
  61. keys = SDL_GetKeyState(NULL);
  62. if (keys[SDLK_UP])
  63. visa = 1;
  64. //tempY -= 5;
  65. if (keys[SDLK_DOWN])
  66. visa = 2;
  67. //tempY += 5;
  68. if (keys[SDLK_LEFT])
  69. visa = 3;
  70. //tempX -= 5;
  71. if (keys[SDLK_RIGHT])
  72. visa = 4;
  73. //tempX += 5;
  74. if (keys[SDLK_ESCAPE])
  75. {
  76. cout << "Terminating program!" << endl;
  77. SDL_Quit();
  78. return 0;
  79. }
  80. }
  81. //gör så att gubben åker hela tiden utan att man trycker
  82. if(visa == 1)
  83. {
  84. imgY -= 5;
  85. }
  86. if(visa == 2)
  87. {
  88. imgY += 5;
  89. }
  90. if(visa == 3)
  91. {
  92. imgX -= 5;
  93. }
  94. if(visa == 4)
  95. {
  96. imgX += 5;
  97. }
  98. //dör om man åker in i väggen
  99. if(imgY == 0)
  100. {
  101. DisplayImageDead("dead.bmp");
  102. SDL_Quit();
  103. /*
  104. SDL_Surface *screen1;
  105. screen1 = SDL_SetVideoMode(640, 480, 16, 0);
  106. SDL_Surface* image3;
  107. image3 = SDL_LoadBMP("dead.bmp");
  108. SDL_BlitSurface(image3, NULL, screen1, NULL);
  109. SDL_Flip(screen1);
  110. SDL_Delay(10000);
  111. SDL_Quit();
  112. return 0;
  113. */
  114. }
  115. if(imgX == 0)
  116. {
  117. DisplayImageDead("dead.bmp");
  118. SDL_Quit();
  119. }
  120. if(imgY == 420)
  121. {
  122. DisplayImageDead("dead.bmp");
  123. SDL_Quit();
  124. }
  125. if(imgX == 600)
  126. {
  127. DisplayImageDead("dead.bmp");
  128. SDL_Quit();
  129. }
  130. //imgX = tempX;
  131. //imgY = tempY;
  132. SDL_Surface* image2;
  133. image2 = SDL_LoadBMP("bg.bmp");
  134. SDL_BlitSurface(image2, NULL, screen, NULL);
  135. //SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0x00, 0x00, 0x00));
  136. DisplayImage(screen, "gubbe.bmp", imgX, imgY);
  137. SDL_Flip(screen);
  138. SDL_Delay(10);
  139. }
  140. // Stäng ner SDL och frigör resurser
  141. SDL_Quit();
  142. return 0;
  143. }
  144.  
  145. int DisplayImage(SDL_Surface* destination, const char*, int x, int y)
  146. {
  147. // Ladda bilden
  148. SDL_Surface* image;
  149. image = SDL_LoadBMP("gubbe.bmp");
  150. if (image == NULL)
  151. {
  152. cout << "Image could not be loaded!" << endl;
  153. return 1;
  154. }
  155. // Skapa en rect
  156. SDL_Rect rect;
  157. rect.x = x;
  158. rect.y = y;
  159. rect.w = image->w;
  160. rect.h = image->h;
  161. // Kopiera över bilden till ytan
  162. SDL_BlitSurface(image, NULL, destination, &rect);
  163. return 0;
  164. }
  165.  
  166.  


-------------------------
EUR~Real programmers don't document. If it was hard to write it should be hard to understand.EUR(TM) - Norem Pascalido



nibbo 15:28 - 28:e Januari 2007 | Post #2
Administratör
Inlägg: 446


Skicka PM
Ojdå, det råkade nog bli en dubbelpost där va, vi låser denna och behåller den andra

-------------------------
Ja! Det är en ,,KTA pungsvansknapp på min avatar!



Sidor: 1

Forum huvudsida -> Programmering -> Hjälp med ett första program i SDL
Atom feed

Tråden är låst | Till toppen