Forum huvudsida -> Programmering -> hjälp med flera bilder
Sidor: 1
Ibaton | 16:09 - 10:e Juli 2005 | Post #1 | |
Medlem Inlägg: 6 Skicka PM |
hur gör man för att lägga in flera olika bmp bilder i kodexemplet fortfarande inte löst#ifdef WIN32 #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") #endif #include "SDL.h" #include <iostream> using namespace std; int DisplayImage(SDL_Surface* destination, const char*, int x, int y) { // Ladda bilden SDL_Surface* image; image = SDL_LoadBMP("test.bmp"); if (image == NULL) { cout << "Image could not be loaded!" << endl; return 1; } // Skapa en rect SDL_Rect rect; rect.x = x; rect.y = y; rect.w = image->w; rect.h = image->h; // Kopiera över bilden till ytan SDL_BlitSurface(image, NULL, destination, &rect); return 0; } int main(int argc, char *argv[]) { SDL_Surface *screen; // En yta SDL_Event event; // Variabel för händelser int imgX=0,imgY=10; // Variabler för att hålla reda på vart bilden ska ritas ut // Initiera SDL if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) { cout << "Error, unable to initialize SDL: " << SDL_GetError() << endl; SDL_Quit(); return 1; } else { cout << "SDL initialized successfully!" << endl; } 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 << "Successfully set video mode!" << endl; } while (1) { SDL_PollEvent(&event); switch (event.type) { case SDL_QUIT: cout << "Terminating program!" << endl; SDL_Quit(); return 0; case SDL_KEYDOWN: Uint8 *keys; # 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; } } DisplayImage(screen, "test.bmp", imgX, imgY); SDL_Flip(screen); SDL_Delay(25); } // Stäng ner SDL och frigör resurser SDL_Quit(); return 0; } ------------------------- Ingen signatur! Senast redigerad 17:53 - 10:e Juli 2005 |
Independence | 16:55 - 10:e Juli 2005 | Post #2 | |
Administratör Inlägg: 1800 Skicka PM |
Skapa en till SDL_Surface* med ett annat namn, ladda in en bild till ytan och blit:a den sedan till skärmen. Precis som du gjorde med den första bilden alltså. ------------------------- Vi är riddarna som säger fiskbulle! |
Ibaton | 17:28 - 10:e Juli 2005 | Post #3 | |
Medlem Inlägg: 6 Skicka PM |
JAg gör antagligen helt fel jag får det fortfarande inte att fungera kan du kanske visa med ett kodexeempel hur man ska göra? #ifdef WIN32 #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") #endif #include "SDL.h" #include <iostream> using namespace std; int DisplayImage(SDL_Surface* destination, const char*, int x, int y) { // Ladda bilden SDL_Surface* image; SDL_Surface* bild; bild = SDL_LoadBMP("smajl.bmp"); image = SDL_LoadBMP("sofia.bmp"); if (image == NULL) { cout << "Image could not be loaded!" << endl; return 1; } // Skapa en rect SDL_Rect rect; rect.x = x; rect.y = y; rect.w = image->w; rect.h = image->h; // Kopiera över bilden till ytan SDL_BlitSurface(image, NULL, destination, &rect); SDL_BlitSurface(bild, NULL, destination, &rect); return 0; } int main(int argc, char *argv[]) { SDL_Surface *screen; // En yta SDL_Event event; // Variabel för händelser int imgX=0,imgY=10; // Variabler för att hålla reda på vart bilden ska ritas ut // Initiera SDL if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) { cout << "Error, unable to initialize SDL: " << SDL_GetError() << endl; SDL_Quit(); return 1; } else { cout << "SDL initialized successfully!" << endl; } 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 << "Successfully set video mode!" << endl; } while (1) { SDL_PollEvent(&event); switch (event.type) { case SDL_QUIT: cout << "Terminating program!" << endl; SDL_Quit(); return 0; case SDL_KEYDOWN: Uint8 *keys; 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; } } SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0x00, 0x00, 0x00)); DisplayImage(screen, "sofia.bmp", 0, 0); DisplayImage(screen, "smajl.bmp", imgX, imgY); SDL_Rect rect; SDL_Flip(screen); SDL_Delay(25); } // Stäng ner SDL och frigör resurser SDL_Quit(); return 0; } ------------------------- Ingen signatur! Senast redigerad 17:49 - 10:e Juli 2005 |
Independence | 18:09 - 10:e Juli 2005 | Post #4 | |
Administratör Inlägg: 1800 Skicka PM |
Men nu vart det väl ändå lite tokigt.. Du behöver bara ha två anrop till DisplayImage, resten av koden borde kunna se ut som vanligt. I början av DisplayImage-funktionen ska det stå:
Då anger du vilken blid som ska laddas i funktionsarnopet istället för i funktionen, det är mycket smidigare. Då behöver du bara skriva en ny rad för varje ny bild som ska laddas in. ------------------------- Vi är riddarna som säger fiskbulle! |
Ibaton | 18:15 - 10:e Juli 2005 | Post #5 | |
Medlem Inlägg: 6 Skicka PM |
om jag gör så så får jag med båda bilderna men dom slås ihop till en bild och reagerar tilsammans ------------------------- Ingen signatur! |
Independence | 23:58 - 10:e Juli 2005 | Post #6 | |
Administratör Inlägg: 1800 Skicka PM |
Hurdå slås ihop? ------------------------- Vi är riddarna som säger fiskbulle! |
Ibaton | 01:43 - 11:a Juli 2005 | Post #7 | |
Medlem Inlägg: 6 Skicka PM |
när jag använder DisplayImage(screen, "filename.bmp", 0, 0); så kommer båda bilderna upp och båda läggs på samma ställe ------------------------- Ingen signatur! |
Independence | 12:31 - 11:a Juli 2005 | Post #8 | |
Administratör Inlägg: 1800 Skicka PM |
Först ligger dom på samma ställe ungefär ja, men du kan ju flytta den ena med pilarnatangenterna eller? Annars måste det ju vara för du glömde ta bort några av de raderna du lade till första gången antar jag. ------------------------- Vi är riddarna som säger fiskbulle! |
Ibaton | 13:07 - 11:a Juli 2005 | Post #9 | |
Medlem Inlägg: 6 Skicka PM |
borde inte koden under funka int DisplayImage(SDL_Surface* destination, const char*, int x, int y) { // Ladda bilden SDL_Surface* image; SDL_Surface* bild; bild = SDL_LoadBMP("smajl.bmp"); image = SDL_LoadBMP("sofia.bmp"); if (image == NULL) { cout << "Image could not be loaded!" << endl; return 1; } // Skapa en rect SDL_Rect rect; rect.x = x; rect.y = y; rect.w = image->w; rect.h = image->h; // Kopiera över bilden till ytan SDL_BlitSurface(image, NULL, destination, &rect); SDL_BlitSurface(bild, NULL, destination, &rect); ------------------------- Ingen signatur! |
ozamosi | 13:42 - 11:a Juli 2005 | Post #10 | |
Administratör Inlägg: 1129 Skicka PM |
Du blit:ar ju båda bilderna till samma plats, så givetvis hamnar de uppepå varandra. Du får skapa två olika rects. ------------------------- Ljusblå |
Independence | 13:46 - 11:a Juli 2005 | Post #11 | |
Administratör Inlägg: 1800 Skicka PM |
Nej nej nej, nu gör du ju ändå så att du overridar det du anger i parametrarna i funktionsanropet genom att hårdkoda in filnamnen i funktionen, det vår så du Inte skulle göra! Använd funktionen från guiden istället för din modifierade variant så ska det gå bra att anropa funktionen två gånger med olika bilder. ------------------------- Vi är riddarna som säger fiskbulle! |
Ibaton | 19:03 - 11:a Juli 2005 | Post #12 | |
Medlem Inlägg: 6 Skicka PM |
jaja får de fortfarande inte att funka får nog inse att de e för svårt för mig ------------------------- Ingen signatur! |
Sidor: 1
Forum huvudsida -> Programmering -> hjälp med flera bilder
Du får inte posta i den här tråden | Till toppen
Datum
2024-04-29 06:21
Vecka: 18
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.