Gå til innhold

Uploade bilder i SDL...


Anbefalte innlegg

Hallo!

Fulgte en liten SDL-guide og tenkte å prøve meg på egen hånd.

Det går ikke veeeldig bra egentlig. Programmet kjører, men det

er vel stort sett alt.

#include <SDL/SDL.h>
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
   if(SDL_Init(SDL_INIT_VIDEO) != 0)
   {
       cerr << "Error: " << SDL_GetError();
       exit(1); 
   }
   atexit(SDL_Quit);
   
   SDL_Surface* screen = SDL_SetVideoMode(600, 600, 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_NOFRAME);
   SDL_Surface* image = SDL_LoadBMP("nemo.bmp");
   
   SDL_Rect dest;
   dest.x = 100;
   dest.y = 100; 
   
   int done = 0;
   while(done == 0)
   {
       SDL_Event event;
       
       while(SDL_PollEvent(&event))
       {
           if(event.type = SDL_QUIT) { done = 1; }
           if(event.type = SDL_KEYDOWN)
               if(event.key.keysym.sym == SDLK_ESCAPE) { done = 1; }
       }
       
       SDL_BlitSurface(screen, &dest, image, &dest);
       SDL_Flip(screen);
   }                                          
}

 

-MV?H zirener ;)

Lenke til kommentar
Videoannonse
Annonse

Nå har jeg modifisert koden litt, og har et nytt problem:

#include <SDL/SDL.h>
#include <windows.h>
#include <cstdlib>
#include <string>
#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
   if(SDL_Init(SDL_INIT_VIDEO) != 0)
   {
       cerr << "Error: " << SDL_GetError();
       exit(1); 
   }
   atexit(SDL_Quit);
   SDL_Surface* image;
   SDL_Surface* screen;
   ifstream inn("pictures.il");
   string s;
       while(getline(inn, s))
       {
           image = SDL_LoadBMP(s.c_str());
           screen = SDL_SetVideoMode(image->w, image->h, 32, SDL_SWSURFACE|SDL_DOUBLEBUF);
           SDL_BlitSurface(image, NULL, screen, NULL);
           SDL_Event event;
           int exe = 1;
           /* Shows the images on the screen */
           while(SDL_WaitEvent(&event) && exe)
           {
               SDL_Flip(screen);
               switch(event.key.keysym.sym)
               {
               case SDLK_ESCAPE: exit(0);
                   break;
               case SDLK_RETURN: exe = 0;
                   break;
               }
               switch(event.type)
               {
                   case SDL_QUIT: exit(0);
                   break;
               }
           }
       }
}

Når programmet har lasta opp alle bildene vil jeg at programmet skal begynne på nytt, uten å måtte kalle SDL_Init og slikt på nytt. Har prøvd med en while-settning, uten at det funker.

Alt jeg får er den svarte kommandolinje-boksen på vinduet. Det er ikke mulig å avslutte programmet med escape eller noe...

Noen som gidder å hjelpe meg?

Lenke til kommentar

Takker for hjelpa! Programmet kjører og går nå!

:thumbup:

 

Edit: Et dårlig forsøk på å lage en smiley uten smilies oversikten.

Edit2: Ferdig kode:

 

#include <cstdlib>
#include <string>
#include <fstream>
#include <iostream>
#include <vector>

#include "SDL/SDL.h"

using namespace std;

int main(int argc, char *argv[])
{
   while(true) {
   if (SDL_Init(SDL_INIT_VIDEO) != 0) {
       cerr << "Error: " << SDL_GetError();
       return 1;
   }
   atexit(SDL_Quit);

   SDL_Surface *image = 0;
   SDL_Surface *screen = 0;

   ifstream filenames("pictures.il");
   string img_file;
   std::cout << "Starting first while...\n";
   while (getline(filenames, img_file)) {
       std::cout << "Received image: " << img_file << std::endl;
       image = SDL_LoadBMP(img_file.c_str());
       if (!image) {
           std::cerr << "Unable to load image: " << SDL_GetError() << std::endl;
           return 1;
       }

       screen = SDL_SetVideoMode(image->w, image->h, 32, SDL_DOUBLEBUF);
       if (!screen) {
           std::cerr << "Unable to init screen: " << SDL_GetError() << std::endl;
           return 1;
       }
       SDL_BlitSurface(image, 0, screen, 0);
       SDL_Flip(screen);

       SDL_Event event;
       bool exe = true;
       /* Shows the images on the screen */
       std::cout << "Starting second while...\n";
       while (SDL_WaitEvent(&event) && exe) {
           SDL_Flip(screen);

           switch (event.key.keysym.sym) {
           case SDLK_ESCAPE:
               exit(0);
           case SDLK_RETURN:
               exe = false;
               break;
           }

           if (event.type == SDL_QUIT) {
               exit(0);
           }
       }
       SDL_FreeSurface(image);
       image = 0;
       SDL_FreeSurface(screen);
       screen = 0;
   }
   SDL_Quit();
}
}

Endret av zirener
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...