Sprites



  • Frusciante schrieb:

    Hm, das versteh ich nicht. Was ist der Dtor?

    oh... ehm..... uuuups 🙄

    Dtor ist eigentlich "Dekonstruktor", aber du hast ja gar keine Klassen in deinem Code. Vergiss einfach was ich gesagt habe.

    Was ich meinte: release die Surface erst am PROGRAMMENDE, also nachdem die Main-Loop bereits geendet hat 🙂



  • Kann das überhaupt Funktonieren? Wenn ich es so mache bekomme ich nur einen Blauen Bildschirm.

    mfg Frusciante

    #include <stdlib.h>
    #include <SDL.h>
    
    #ifdef _WIN32
    #undef main
    #endif
    
    int var = 0;
    int vab = 1;
    
    int main(int argc, char *argv[])
    {
        SDL_Surface *screen, *image, *image2, *image3;
    	SDL_Rect dst, dstblue;
        SDL_Event event;
    	Uint8 *keys;
    	int tuxX = 50, tuxY = 50 ;
        bool done = false;
        if(SDL_Init(SDL_INIT_VIDEO) == -1)
        {
            printf("Can't init SDL:  %s\n", SDL_GetError());
            exit(1);
        }
        atexit(SDL_Quit); 
        screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 255));
        if(screen == NULL)
        {
            printf("Can't set video mode: %s\n", SDL_GetError());
            exit(1);
        }
        image3 = SDL_LoadBMP("Map2.bmp");
    	if(image3 == NULL)
    	{
    		printf("Can't load image of tux: %s\n", SDL_GetError());
    		exit(1);
    	}
    	image2 = SDL_LoadBMP("Map.bmp");                                     //LOADMAP
    	if(image2 == NULL)
    	{
    		printf("Can't load image of Map: %s\n", SDL_GetError());
    		exit(1);
    	}                                                                   //LOADBMP
        image = SDL_LoadBMP("tux.bmp");
        if(image == NULL)                                                   //LOADTUX
        {
            printf("Can't load image of tux: %s\n", SDL_GetError());
            exit(1);
        }	                                                                //LOADTUX
    	dst.w = image->w;
    	dst.h = image->h;
    	dstblue.w = image->w + 1;
    	dstblue.h = image->h + 1;
        SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(image->format, 255, 0, 255));   
        while(!done)
        {
            while(SDL_PollEvent(&event))
            {
                switch(event.type)
                {
                    case SDL_QUIT:
                    done = true;
                    break;
                }
            }
    		keys = SDL_GetKeyState(NULL);
    		if(keys[SDLK_UP])
    		{
    			if(tuxY > 10)
    				tuxY--;
    		}
    		if(keys[SDLK_DOWN])
    		{
    			if(tuxY < 470 - image->h)
    				tuxY++;
    		}
    		if(keys[SDLK_RIGHT])
    		{
    			if(tuxX < 630 - image->w)
    				tuxX++;
    		}
    		if(keys[SDLK_LEFT])
    		{
    			if(tuxX > 10)
    				tuxX--;
    		}
    
    		dst.x = tuxX;
    		dst.y = tuxY;
    		dstblue.x = tuxX - 1;
    		dstblue.y = tuxY - 1;
    		SDL_FillRect(screen, &dstblue, SDL_MapRGB(screen->format, 0, 0, 255));
    
        }
    
    			if (var == 0)
    		{
    		SDL_BlitSurface(image2, 0, screen, 0);
    		SDL_BlitSurface(image, NULL, screen, &dst);
    		SDL_Flip(screen);
    		}
    	    if (tuxX == 250, tuxY == 10)
    		{
    
    			var = 2;
    				if (var == 2)
    				{
    					if (image2 > 0)
    					{
    		SDL_FreeSurface(image2);
    					}
            SDL_BlitSurface(image3, 0, screen, 0);
    		SDL_BlitSurface(image, NULL, screen, &dst);
    		SDL_Flip(screen);
    		}
    		}
    
        SDL_FreeSurface(image);
        return 0;
    }
    

    Noch mal so als Zwischenfrage, weiß jemand ob es daran liegt das ich das nicht vorhande Bild Freigebe? Oder an der Keyabfrage. MEin Prob ist ja das ich Tux auf dem neugeladenen Bild nur nach links und rechts bewegen kann. Wenn ich nach oben und unten drücke gibt es komische grafik Fehler oder er macht gar nichts.


Anmelden zum Antworten