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.