Forum huvudsida -> Programmering -> SDL (hjälp)
Sidor: 1
IronMaidenFreak | 11:06 - 15:e Februari 2009 | Post #1 | |
Medlem Inlägg: 10 Skicka PM |
Hur lägger man upp två eller flera bilder i SDL? Jag har försökt, men då blinkar bara bilderna och hakar när man försöker röra dem. Kod: //Visar vart programmet ska leta efter filerna. #ifdef WIN32 #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") #endif //Inkluderar bibliotek. #include <SDL.h> #include <iostream> using namespace std; //Skärmen som bilden visas på. int DisplayImage(SDL_Surface* destination, const char*, int x, int y) { //Laddar bilden. SDL_Surface* bakgrund; SDL_Surface* image; bakgrund = SDL_LoadBMP("bakgrund.bmp"); image = SDL_LoadBMP("test.bmp"); if (image == NULL) { cout<< "Image could not be loaded." << endl; SDL_Quit(); return 1; } //Vart bilden laddas upp. SDL_Rect rect; rect.x = x; rect.y = y; rect.w = image->w; rect.h = image->h; SDL_BlitSurface(image, NULL, destination, &rect); SDL_BlitSurface(bakgrund, NULL, destination, &rect); return 0; } //Programmets main funktion. int main(int argc, char *argv[]) { SDL_Surface *screen; SDL_Event event; int imgX=0,imgY=10; //Intierar SDL. if (SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0) { cout<< "Error, unable to initalize SDL: " << SDL_GetError() << endl; SDL_Quit(); return 1; } else { cout<< "Succsesfully initalized SDL!" << endl; } //Ställer in höjd, bredd, färger. hårdvara och buff. screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE|SDL_DOUBLEBUF); if (screen == NULL) { cout<< "Unable to set video mode: " << SDL_GetError() << endl; SDL_Quit(); return 1; } else { cout<< "Succsesfully set video mode!" << endl; } //Gör så att bilden ritas ut flera gånger för den är i en loop. while(1) { SDL_PollEvent(&event); switch(event.type) { case SDL_QUIT: cout<< "Terminating program!" << endl; SDL_Quit(); return 0; case SDL_KEYDOWN: Uint8 *keys; //Vart bilden ska ritas ut (rör på sig). keys = SDL_GetKeyState(NULL); if (keys[SDLK_UP]) imgY -= 5; if (keys[SDLK_DOWN]) imgY += 5; if (keys[SDLK_LEFT]) imgX -=5; if (keys[SDLK_RIGHT]) imgX +=5; if (keys[SDLK_ESCAPE]) { cout<< "Terminating program!" << endl; SDL_Quit(); return 0; } } //"Suddar" ut bilderna innan så att det inte blir massor av bilder (fyller bakgrunden med svart innan bilden ritas). SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0x00, 0x00, 0x00)); //Ritar ut bild. DisplayImage(screen, "bakgrund.bmp", 0, 0); SDL_Flip(screen); SDL_Delay(25); //Ritar ut bild. DisplayImage(screen, "test.bmp", imgX, imgY); SDL_Flip(screen); SDL_Delay(25); } //Stänger programmet. SDL_Quit(); //Visar att det har slutat som det ska. return 0; } |
Nissebosselasse | 11:21 - 15:e Februari 2009 | Post #2 | |
Medlem Inlägg: 490 Skicka PM |
Du ska inte göra en flip efter varje gång du har ritat ut en bild. Rita allt först, och "flippa" sedan. ------------------------- http://pushingcows.se Gula Nallen |
IronMaidenFreak | 16:45 - 16:e Februari 2009 | Post #3 | |
Medlem Inlägg: 10 Skicka PM |
Tack. |
Sidor: 1
Forum huvudsida -> Programmering -> SDL (hjälp)
Du får inte posta i den här tråden | Till toppen
Datum
2024-12-22 09:01
Vecka: 51
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.