Grafiken wechseln



  • Hi,

    in dem folgendem Programm bewegt sich eine 2D Grafik auf Tastendruck auf einer Hintergrunggrafik. Nun möchte ich, das sich diese 2D Grafik bewegt, also zum Beispiel Laufbewegungen macht(Animation). Die 2D Grafik soll immer gewechselt werden nur ich weiß nicht genau, wie ich dies anstellen soll. Ich habe es schon mit einem Timer versucht und dann "f" in einer Ereignisschleife einen anderen Wert zugewiesen.Ich benutze SDL. Na ja seht selbst:

    #include <stdio.h> 
    #include <stdlib.h> 
    
    #include "stdafx.h"
    #include <time.h> 
    #ifdef _WIN32 
    #undef main 
    #endif
    #include <stdlib.h>
    #include <stdio.h>
    
    #include <Sdl/SDL.h>
    
    int main(int argc, char *argv[])
    {
    SDL_Surface *screen, *image[10], *back; 
    SDL_Rect dst,dst2 ,dst3, src3;	//
    SDL_Event event;		//IN Event werden später die Ereignisse gespeichert
    Uint8 *keys;			//Tastatureingabe wird initalisiert
    int X = 50, Y = 50;	//Koordinaten von dem sprite
    
    // Zeit, die ein Hauptschleifendurchgang mindestens dauern muss: 
    int iMinTimes = 1000 / 25; 
    
    bool done = false;	//Solange done false ist läuft das Programm
    
    if(SDL_Init(SDL_INIT_VIDEO) == -1) //Initialisierung und Fehlerabrage von 
    {									//von SDL_INIT_VIDEO und SDL
    printf("Can't init SDL: %s\n", SDL_GetError()); //Wenn SDL nicht initialisiert  
    exit(1);										 
    }											
    
    atexit(SDL_Quit);	
    
    back = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_DOUBLEBUF); //Bildschirmmodus wird gesetzt
    SDL_FillRect(back, NULL, SDL_MapRGB(back->format, 0, 0, 255));
    
    if(back == NULL)
    {
    printf("Can't set video mode: %s\n", SDL_GetError());
    exit(1);
    }
    
    int f=1;
    
    screen = SDL_LoadBMP("Jesus.bmp");
    image[1] = SDL_LoadBMP("1.bmp");
    image[2] = SDL_LoadBMP("2.bmp");
    image[3] = SDL_LoadBMP("3.bmp");
    image[4] = SDL_LoadBMP("4.bmp");
    
    if(screen == NULL)
    {												
    printf("Can't load image of tux: %s\n", SDL_GetError());
    exit(1);
    }
    
    for (int c=1; c<=3;c++) {
    	f++;
    if(image[f] == NULL)
    {												
    printf("Can't load image of tux: %s\n", SDL_GetError());
    exit(1);
    }
    }
    dst.x = 0;
    dst.x = 0;
    dst.w = screen->w;
    dst.h = screen->h;
    
    dst2.w = image[f]->w;
    dst2.h = image[f]->h;
    
    src3.w = image[f]->w;
    src3.h = image[f]->h;
    
    dst3.w = image[f]->w;
    dst3.h = image[f]->h;
    
    SDL_SetColorKey(image[f], SDL_SRCCOLORKEY, SDL_MapRGB
    (image[f]->format, 255, 0, 255)); //Eine Farbe wird durchsichtig gemacht 
    
    while(!done)
    {
    // Momentane Zeit merken 
      Uint32 iStartTime = SDL_GetTicks(); 
    
    while(SDL_PollEvent(&event))
    {
    switch(event.type)
    {
    case SDL_QUIT:	
    done = true;
    break;
    }
    }
    keys = SDL_GetKeyState(NULL);
    if(keys[SDLK_UP])
    {
    if(Y > 10)
    Y--;
    f=2;  //f wird ein anderer Wert zugeordnet
    
      while(SDL_GetTicks() - iStartTime < iMinTimes) ; 
    
    f=3;
    
    }
    if(keys[SDLK_DOWN])
    {
    if(Y < 470 - image[f]->h)
    Y++;
    //f=3;
    }
    if(keys[SDLK_RIGHT])
    {
    if(X < 630 - image[f]->w)
    X++;
    }
    if(keys[SDLK_LEFT])
    {
    if(X > 10)
    X--;
    }
    
    dst2.x = X;	//gibt die spätere Größe beim
    dst2.y = Y;	//Blitten an(siehe unten)
    
    src3.x = X -10;
    src3.y = Y -10;
    
    dst3.x = X-10;	
    dst3.y = Y-10;	
    
    SDL_BlitSurface(screen, NULL, back, &dst);
    SDL_BlitSurface(image[f], NULL, back, &dst2);
    SDL_BlitSurface(image[f], &src3, back, &dst3);
    
    SDL_Flip(back);	
    }
    SDL_FreeSurface(image[f]); //Speicher(image) wird freigegeben
    SDL_FreeSurface(screen);
    return 0;
    }
    

    Wüsstet ihr eine Lösung für dieses Problem?
    Schon einmal vielen Dank im Vorraus?

    Gruß Memp.



  • Hi,
    warte doch ersteinmal auf eine Antwort im SDLForum,
    ich denke es kommt nicht so gut wenn man gleichzeitig(absolut)
    in 2Foren nach Hilfe fragt:)(Hab ich auch mal gemacht, tue es nicht!)
    siehe:
    http://sdlforum.de.vu/

    cu max



  • Ich habe doch gewartet, aber es kam nicht die richtige Antwort.
    Außerdem was ist so schlimm daran, wenn man zweigleisig fährt?
    Meinst du die SDLforum-user fühlen sich dann ungerecht behandelt oder nicht ernst genommen? Naja, ich werde darüber nachdenken.
    Aber danke für deine Antwort.

    Gruß Crabbe alias Memphisto

    PS: Hier scheint auch keiner eine Antwort auf meine Frage zu haben.



  • Master_Max schrieb:

    Hi,
    warte doch ersteinmal auf eine Antwort im SDLForum,
    ich denke es kommt nicht so gut wenn man gleichzeitig(absolut)
    in 2Foren nach Hilfe fragt:)(Hab ich auch mal gemacht, tue es nicht!)
    siehe:
    http://sdlforum.de.vu/

    cu max

    GELABER!!



  • Hi,

    Außerdem was ist so schlimm daran, wenn man zweigleisig fährt?
    Das evt. zwei Personen dir gleichzeitig bei deinem Problem helfen
    und sich somit einer umsonst arbeit macht.

    Meinst du die SDLforum-user fühlen sich dann ungerecht behandelt oder nicht ernst genommen? Nein ungerecht behandelt oder ernstgenommen nicht,
    aber sie mache wie oben schon erwähnt sich umsonst arbeit, was nicht
    unbedingt nötig ist.

    Es war ja nur eine bitte.

    cu max



  • Kannst du 2 Bilder gleichzeitig anzeigen?


Anmelden zum Antworten