Forum: SDL spel ?

Forum huvudsida -> Programmering -> SDL spel ?

Sidor: 1

Till botten

jonatanhost 18:14 - 30:e Juni 2010 | Post #1
Medlem
Inlägg: 8


Skicka PM
Tänkte göra ett spel i sdl där man skuter något men vet inte hur man ska göra så att en bild kommer fram på en tangenttrykcning.




Vitdom 10:08 - 2:a Juli 2010 | Post #2
Medlem
Inlägg: 71


Skicka PM
Nu vet jag inte alls hur du har eller kommer att utforma ditt motorsystem, men detta är ett exempel:

  1. while(SDL_PollEvent(&event))
  2. {
  3. switch(event.type)
  4. {
  5. case SDL_KEYDOWN:
  6. if(event.key.keysym.sym == SDLK_SPACE) // Om spelaren trycker på mellanslag
  7. // Rita bilden och hantera
  8. break;
  9. }
  10. }


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



Senast redigerad 10:15 - 2:a Juli 2010


CleliaCosta 15:26 - 2:a Juli 2010 | Post #3
Medlem
Inlägg: 1


Skicka PM
nice forum, recommend you to read term paper service.




jonatanhost 12:05 - 4:e Juli 2010 | Post #4
Medlem
Inlägg: 8


Skicka PM
Okej
Men jag vet inte hur jag ska få det att funka?
Har inte fått rätt på vad som gör vad när man laddar in bildenSmiley

  1. #include "SDL.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int DisplayImage(SDL_Surface* destination, const char*, int x, int y)
  7. {
  8. // Ladda bilden
  9. SDL_Surface* image;
  10. image = SDL_LoadBMP("rocket.bmp");
  11. if (image == NULL)
  12. {
  13. cout << "Image could not be loaded!" << endl;
  14. return 1;
  15. }
  16.  
  17. // Skapa en rect
  18. SDL_Rect rect;
  19. rect.x = x;
  20. rect.y = y;
  21. rect.w = image->w;
  22. rect.h = image->h;
  23.  
  24. // Kopiera över bilden till ytan
  25. SDL_BlitSurface(image, NULL, destination, &rect);
  26.  
  27. return 0;
  28. }
  29.  
  30.  
  31. int main(int argc, char *argv[])
  32. {
  33.  
  34. SDL_Surface *screen; // En yta
  35. SDL_Event event; // Variabel för händelser
  36. int imgX=0,imgY=403; // Variabler för att hålla reda på vart bilden ska ritas ut
  37.  
  38. // Initiera SDL
  39. if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 )
  40. {
  41. cout << "Error, unable to initialize SDL: " << SDL_GetError() << endl;
  42. SDL_Quit();
  43. return 1;
  44. }
  45. else
  46. {
  47. cout << "SDL initialized successfully!" << endl;
  48. }
  49.  
  50. screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE|SDL_DOUBLEBUF);
  51.  
  52. if (screen == NULL)
  53. {
  54. cout << "Unable to set video mode: " << SDL_GetError() << endl;
  55. SDL_Quit();
  56. return 1;
  57. }
  58. else
  59. {
  60. cout << "Successfully set video mode!" << endl;
  61. }
  62.  
  63. while (1)
  64. {
  65. SDL_PollEvent(&event);
  66. switch (event.type)
  67. {
  68. case SDL_QUIT:
  69. cout << "Terminating program!" << endl;
  70. SDL_Quit();
  71. return 0;
  72. case SDL_KEYDOWN:
  73. Uint8 *keys;
  74.  
  75. keys = SDL_GetKeyState(NULL);
  76. if (keys[SDLK_UP])
  77. imgY -= 10;
  78. if (keys[SDLK_DOWN])
  79. imgY += 10;
  80. if (keys[SDLK_LEFT])
  81. imgX -= 10;
  82. if (keys[SDLK_RIGHT])
  83. imgX += 10;
  84. if (keys[SDLK_SPACE])
  85. {
  86.  
  87. }
  88. if (keys[SDLK_ESCAPE])
  89. {
  90. cout << "Terminating program!" << endl;
  91. SDL_Quit();
  92. return 0;
  93. }
  94. }
  95.  
  96. SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0xFF, 0xFF, 0xFF));
  97. DisplayImage(screen, "rocket.bmp", imgX, imgY);
  98. SDL_Flip(screen);
  99. SDL_Delay(25);
  100. }
  101.  
  102. // Stäng ner SDL och frigör resurser
  103. SDL_Quit();
  104. return 0;
  105. }





Vitdom 20:17 - 4:e Juli 2010 | Post #5
Medlem
Inlägg: 71


Skicka PM
Vad är det som inte fungerar, tyvärr har jag inte tid att testa din kod.

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





jonatanhost 20:49 - 4:e Juli 2010 | Post #6
Medlem
Inlägg: 8


Skicka PM
Jag får inte rätt på att få fram bilden, det är inte med i koderna ovanför. Men vad ska jag lägga till och var ???




jonatanhost 23:11 - 21:a Juli 2010 | Post #7
Medlem
Inlägg: 8


Skicka PM
Nytt problem.
Försöker ta fram en bild när jag klickar på pil neråt men det händer inget. Varför ?
  1. #include <SDL.h>
  2. #pragma comment(lib, "SDL.lib")
  3. #pragma comment(lib, "SDLmain.lib")
  4.  
  5. SDL_Surface *screen = NULL;
  6. SDL_Surface *background = NULL;
  7. SDL_Surface *image = NULL;
  8. SDL_Event event;
  9. bool running = true;
  10.  
  11. void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
  12. {
  13. SDL_Rect rect;
  14. rect.x = x;
  15. rect.y = y;
  16.  
  17. SDL_BlitSurface(source, NULL, destination, &rect);
  18. }
  19.  
  20. int main(int argc, char* argv[])
  21. {
  22. SDL_Init(SDL_INIT_VIDEO);
  23. screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
  24. background = SDL_LoadBMP("transformers.bmp");
  25. image = SDL_LoadBMP("image.bmp");
  26.  
  27.  
  28.  
  29. while(running = true)
  30. {
  31. if(SDL_PollEvent(&event))
  32. {
  33. if(event.type == SDL_QUIT)
  34. {
  35. running = false;
  36. }
  37. }
  38.  
  39. if(event.type == SDL_KEYDOWN)
  40. {
  41. if(event.key.keysym.sym == SDLK_DOWN)
  42. {
  43. apply_surface(0,0,image,screen);
  44. }
  45. }
  46.  
  47. apply_surface(0,40,background,screen);
  48. SDL_Flip(screen);
  49. }
  50.  
  51. return 0;
  52. }





Larrxi 19:16 - 22:a Juli 2010 | Post #8
Medlem
Inlägg: 3


Skicka PM
Du gör allt rätt men du kan inte rita ut bakgrunden sist för då ritar den över allt annat. Flytta upp apply_surface(0,40,background,screen); till början av while-satsen.

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



jonatanhost 22:29 - 31:a Juli 2010 | Post #9
Medlem
Inlägg: 8


Skicka PM
Har gjort det men jag får inte fram image.bmp på skärmen. Vad mer kan vara fel ??




Sidor: 1

Forum huvudsida -> Programmering -> SDL spel ?
Atom feed

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