Dead_Rabbit Skrevet 14. desember 2004 Del Skrevet 14. desember 2004 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
saboi Skrevet 14. desember 2004 Del Skrevet 14. desember 2004 int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect); ser ut som om du må bytte image og screen. image er jo src og screen er dst Lenke til kommentar
kyrsjo Skrevet 14. desember 2004 Del Skrevet 14. desember 2004 ta en titt på "frac" (følg linken i siggen). Den bruker SDL. Lenke til kommentar
Dead_Rabbit Skrevet 14. desember 2004 Forfatter Del Skrevet 14. desember 2004 saboi: Takk, det funka! (*Dunke hodet*) kyrsjo: Takker og bukker! Fin link! Lenke til kommentar
Dead_Rabbit Skrevet 17. desember 2004 Forfatter Del Skrevet 17. desember 2004 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
☀ ❄ Skrevet 18. desember 2004 Del Skrevet 18. desember 2004 Du må huske å rydde opp etter deg Legg til: SDL_FreeSurface(image); image = 0; SDL_FreeSurface(screen); screen = 0; i den ytterste while-løkken. (Komplett kode i /home/zirener/sdl_stale.cpp på mputt) Lenke til kommentar
Dead_Rabbit Skrevet 18. desember 2004 Forfatter Del Skrevet 18. desember 2004 (endret) Takker for hjelpa! Programmet kjører og går nå! 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 18. desember 2004 av zirener Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå