Forum: hjälp med flera bilder

Forum huvudsida -> Programmering -> hjälp med flera bilder

Sidor: 1

Till botten

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å:
  1.  
  2. int DisplayImage(SDL_Surface* destination, const char* path, int x, int y)
  3. {
  4. // Ladda bilden
  5. SDL_Surface* image;
  6.  
  7. image = SDL_LoadBMP(path);


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! Smiley 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
Atom feed

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