Forum: SDL hjälp

Forum huvudsida -> Programmering -> SDL hjälp

Sidor: 1

Till botten

achnorr 19:42 - 29:e Maj 2007 | Post #1
Medlem
Inlägg: 82


Skicka PM
  1. #ifdef WIN32
  2. #pragma comment(lib, "SDL.lib")
  3. #pragma comment(lib, "SDLmain.lib")
  4. #pragma comment(lib, "SDL_Image.lib")
  5. #endif
  6.  
  7. #include <iostream>
  8. #include "SDL.h"
  9. #include "SDL_image.h"
  10.  
  11. using namespace std;
  12.  
  13. int DisplayImage(SDL_Surface* destination, const char*, int x, int y)
  14. {
  15. SDL_Surface*background;
  16. SDL_Surface*start;
  17. SDL_Surface*start2;
  18. background = IMG_Load("test.jpg");
  19. start = SDL_LoadBMP("start.bmp");
  20. start2 = SDL_LoadBMP("start2.bmp");
  21.  
  22. SDL_Rect rectstart;
  23. rectstart.x =800;
  24. rectstart.y =400;
  25. rectstart.w =50;
  26. rectstart.h =50;
  27. SDL_BlitSurface(background,NULL,destination,NULL);
  28. SDL_BlitSurface(start,NULL,destination,&rectstart);
  29. SDL_BlitSurface(start2,NULL,destination,&rectstart);
  30.  
  31. return 0;
  32. }
  33.  
  34. int main(int argc, char*argv[])
  35. {
  36. SDL_Event event;
  37. SDL_Surface* screen;
  38. screen = SDL_SetVideoMode(1280, 1024, 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
  39. DisplayImage(screen,"test.jpg",0,0);
  40. DisplayImage(screen,"start.jpg",0,0);
  41. SDL_Flip(screen);
  42. while(true)
  43. {
  44. SDL_PollEvent(&event);
  45.  
  46. switch (event.type);
  47. {
  48.  
  49. Uint8 *keys;
  50. keys=SDL_GetKeyState(NULL);
  51. if(keys[SDLK_UP])
  52. {
  53. cout<<"pressed up";
  54. DisplayImage(screen,"start2.bmp",0,0);//om man trycker på pilen uppåt så ska bilden start bytas ut mot bilden start2.bmp
  55. SDL_Flip(screen);
  56. SDL_Delay(30);
  57. }
  58. if(keys[SDLK_DOWN])
  59. {
  60. cout<<"presssed down";
  61. DisplayImage(screen,"start.bmp",0,0);//om man tryck på pilen neråt ska bilden bytas till bild start.bmp
  62. SDL_Delay(30);
  63. }
  64. if(keys[SDLK_ESCAPE])
  65. {
  66. SDL_Quit();//om man trycker escape så avbryts programmet
  67. return 0;
  68. }
  69.  
  70. }
  71. }
  72.  
  73. SDL_Quit();
  74. return 0;
  75. }

meningen är att om man trycker på uppåtpilen så ska start.bmp ersättas med start2.bmp men när man startar programmet så visas bara start2.bmp utan att man har tryckt något Smiley

-------------------------
Ohhoo*



ozamosi 19:56 - 29:e Maj 2007 | Post #2
Administratör
Inlägg: 1129


Skicka PM
DisplayImage blittar ju först start.bmp, och sedan start2.bmp, oavsett vilka argument man skickar.

-------------------------
Ljusblå



achnorr 20:13 - 29:e Maj 2007 | Post #3
Medlem
Inlägg: 82


Skicka PM
aha så alla bilder man har blittat visas om man skriver ut DisplayImage?

-------------------------
Ohhoo*



ozamosi 20:29 - 29:e Maj 2007 | Post #4
Administratör
Inlägg: 1129


Skicka PM
Nej. Läs koden till DisplayImage. Funktionen ignorerar alla argument utom destination, och blittar först background, sedan start, och slutligen start2.

-------------------------
Ljusblå



achnorr 20:39 - 29:e Maj 2007 | Post #5
Medlem
Inlägg: 82


Skicka PM
aha:) tack

-------------------------
Ohhoo*



achnorr 21:19 - 29:e Maj 2007 | Post #6
Medlem
Inlägg: 82


Skicka PM
finns det inget man kan skriva för att bara skriva ut en bild istället för alla man har blittat ? eller ändra bittordningen i under programmets gång ?Smiley

-------------------------
Ohhoo*



Independence 21:23 - 29:e Maj 2007 | Post #7
Administratör
Inlägg: 1800


Skicka PM
,,r inte standardbeteendet att rita en bild åt gången?Smiley

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

Vi är riddarna som säger fiskbulle!





FunkyChicken 21:28 - 29:e Maj 2007 | Post #8
Nyhetsredaktör
Inlägg: 800


Skicka PM
    Citat av achnorr:
finns det inget man kan skriva för att bara skriva ut en bild istället för alla man har blittat ?


varför blitta bilder du INTE vill se?Smiley




achnorr 21:55 - 29:e Maj 2007 | Post #9
Medlem
Inlägg: 82


Skicka PM
men om man har koden ovan och sedan i första if satsen vill man skriva ut bilderna i ordningen background, start. sedan i andra vill man skriva ut bilderna background,start2. då går det väll inte att använda DisplayImage eftersom då visas alla som man har blittat(background, start2, start). och då blir det fel i antigen den ena eller den andra if satsen.
så frågan är fortfarande: finns det inget man kan skriva för att bara skriva ut en bild istället för alla man har blittat ? eller ändra bittordningen under programmets gång ?
(om jag inte har missuppfattat alltSmiley )

-------------------------
Ohhoo*



ozamosi 21:58 - 29:e Maj 2007 | Post #10
Administratör
Inlägg: 1129


Skicka PM
Läs din kod. Läs funktionen DisplayImage.

-------------------------
Ljusblå



FunkyChicken 22:17 - 29:e Maj 2007 | Post #11
Nyhetsredaktör
Inlägg: 800


Skicka PM
    Citat av achnorr:

så frågan är fortfarande: finns det inget man kan skriva för att bara skriva ut en bild istället för alla man har blittat ? eller ändra bittordningen under programmets gång ?
(om jag inte har missuppfattat alltSmiley )


Och svaret är fortfarande: Varför envisas du med att blitta bilder du INTE vill se?

Du har nog missuppfattat hur saker fungerar, eller inte brytt dig om att sätta dig in i det överhuvudtaget. SDL_BlitSurface ritar ut en bild på din "skärm" som du sedan "flippar" till grafikminnet så att den syns. Du ska alltså blitta varje bild du vill se, EN gång och sedan flippa skärmminnet. Just nu blittar du ALLA bilder och flippar massor av gånger. Dessutom gör du konstiga funktionsanrop som ozamosi redan påpekat. Koden är dålig - gör om från början så kommer du förstå bättre!




Independence 22:19 - 29:e Maj 2007 | Post #12
Administratör
Inlägg: 1800


Skicka PM
Jag är inte helt säker på vad du menar, men det jag tror du vill göra är att rita svart över hela skärmen och sedan rita ut bilderna igen i rätt ordning. Alternativt den mer avancerade lösningen och bara sudda de bitarna som du ritat på innan, men då måste du veta exakt vart det är och spara i variabler osv.

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

Vi är riddarna som säger fiskbulle!





FunkyChicken 22:35 - 29:e Maj 2007 | Post #13
Nyhetsredaktör
Inlägg: 800


Skicka PM
  1. #ifdef WIN32
  2. #pragma comment(lib, "SDL.lib")
  3. #pragma comment(lib, "SDLmain.lib")
  4. #pragma comment(lib, "SDL_Image.lib")
  5. #endif
  6. #include <iostream>
  7. #include "SDL.h"
  8. #include "SDL_image.h"
  9. using namespace std;
  10. int DisplayImage(SDL_Surface* destination, SDL_Surface* img, int x, int y)
  11. {
  12.  
  13. SDL_Rect rectstart;
  14. rectstart.x =800;
  15. rectstart.y =400;
  16. rectstart.w =50;
  17. rectstart.h =50;
  18. SDL_BlitSurface(background,NULL,destination,NULL);
  19. SDL_BlitSurface(img,NULL,destination,&rectstart);
  20. return 0;
  21. }
  22. int main(int argc, char*argv[])
  23. {
  24. SDL_Event event;
  25.  
  26. SDL_Surface*background;
  27. SDL_Surface*start;
  28. SDL_Surface*start2;
  29. background = IMG_Load("test.jpg");
  30. start = SDL_LoadBMP("start.bmp");
  31. start2 = SDL_LoadBMP("start2.bmp");
  32.  
  33. SDL_Surface* screen;
  34. screen = SDL_SetVideoMode(1280, 1024, 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
  35. //DisplayImage(screen,"test.jpg",0,0);
  36. //DisplayImage(screen,"start.jpg",0,0);
  37. //SDL_Flip(screen);
  38. while(true)
  39. {
  40. SDL_PollEvent(&event);
  41. switch (event.type);
  42. {
  43. Uint8 *keys;
  44. keys=SDL_GetKeyState(NULL);
  45. if(keys[SDLK_UP])
  46. {
  47. cout<<"pressed up";
  48. DisplayImage(screen,start2,0,0);//om man trycker på pilen uppåt så ska bilden start bytas ut mot bilden start2.bmp
  49. SDL_Flip(screen);
  50. SDL_Delay(30);
  51. }
  52. if(keys[SDLK_DOWN])
  53. {
  54. cout<<"presssed down";
  55. DisplayImage(screen,start,0,0);//om man tryck på pilen neråt ska bilden bytas till bild start.bmp
  56. SDL_Delay(30);
  57. }
  58. if(keys[SDLK_ESCAPE])
  59. {
  60. SDL_Quit();//om man trycker escape så avbryts programmet
  61. return 0;
  62. }
  63. }
  64. }
  65. SDL_Quit();
  66. return 0;
  67. }


Det kanske är såhär du vill göra? (Inte testat, bara en knuff i rätt riktning - hoppas jag)




achnorr 22:47 - 29:e Maj 2007 | Post #14
Medlem
Inlägg: 82


Skicka PM
DU ,,R MIN GUDSmiley tack behövde bara ändra nån rad för att få det att funkaSmiley

-------------------------
Ohhoo*



FunkyChicken 22:51 - 29:e Maj 2007 | Post #15
Nyhetsredaktör
Inlägg: 800


Skicka PM


:-)




lord_slampa 15:50 - 19:e Juni 2007 | Post #16
Medlem
Inlägg: 46


Skicka PM
haha måste bara säga att fy fan vad SDL är simpelt.
men dock en bra träning om du ska gå vidare med D3D, OPG.

-------------------------
DirectX + Win32 Api For the win!



Nissebosselasse 22:45 - 19:e Juni 2007 | Post #17
Medlem
Inlägg: 490


Skicka PM
    Citat av lord_slampa:
haha måste bara säga att fy fan vad SDL är simpelt.
men dock en bra träning om du ska gå vidare med D3D, OPG.


Vad är felet med att ha ett lättarbetat API? Det ser jag snarare som en fördel.

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



lord_slampa 01:48 - 20:e Juni 2007 | Post #18
Medlem
Inlägg: 46


Skicka PM
jo det var det jag menade. fast med andra ord!
om du tog deta som negativ kritik, så var det fel!

-------------------------
DirectX + Win32 Api For the win!



Sidor: 1

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

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