Joku on nyt pielessä kun kokoajan ohjelma kaatuu segfaulttiin. Jos kommentoi SDL_Flip:in pois niin toimii, mutta kuvaa ei tietenkään näy.
Koodi:
#include <SDL/SDL.h> SDL_Surface *ruutu, *ukko, *lattia; SDL_Event events; signed int force = -10; int ukkoy, ukkox; #define RES_X 640 #define RES_Y 480 void blit(SDL_Surface*, SDL_Surface*, int, int); int main(int argc, char *argv[]) { SDL_Init(SDL_INIT_VIDEO); SDL_SetVideoMode(RES_X, RES_Y, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); SDL_WM_SetCaption("xd", 0); ukko = SDL_LoadBMP("tilet/ukko.bmp"); SDL_SetColorKey(ukko, SDL_SRCCOLORKEY, SDL_MapRGB(ukko->format,0,0,0)); lattia = SDL_LoadBMP("tilet/maa.bmp"); SDL_SetColorKey(lattia, SDL_SRCCOLORKEY, SDL_MapRGB(lattia->format,0,0,0)); bool running=true; while (running) { SDL_FillRect(ruutu, NULL, 0x000000) ; SDL_PollEvent(&events); if(events.key.keysym.sym == SDLK_ESCAPE || events.type == SDL_QUIT) running = false; if(events.key.keysym.sym == SDLK_UP)--ukkoy; if(events.key.keysym.sym == SDLK_DOWN)++ukkoy; if(events.key.keysym.sym == SDLK_LEFT)--ukkox; if(events.key.keysym.sym == SDLK_RIGHT)++ukkox; SDL_Flip(ruutu); blit(ukko, ruutu, ukkox, ukkoy); } SDL_Quit(); return 0; } void blit(SDL_Surface *kuva, SDL_Surface *naytto, int x, int y) { SDL_Rect alue; // mille alueellä näyttöä kuva piirretään alue.x = x; // koordinaatit alue.y = y; SDL_BlitSurface(kuva, NULL, naytto, &alue); // piirto }
...ja tuo koodi on eilenillalla muutamassa minuutissa väsätty, niinkuin varmaan pastetusta funktiosta voi huomatakin, mutta en kuitenkaa huomaa tuossa mitään virhettä. Huomaisitteko te?
EDIT: Ohops, nyt ei toimi edes vaikka kommentoisi tuon pois. x( Joku mättää pahasti.
Ahaa nyt aukeaa kun ottaa fillRect:in pois. O_o outoa Grafiikkaa ei (tietenkään) näy.
Ongelmao n se, että flippaat ruutu-osoitinta, joka on NULL koska et ole asettanut siihen mitään. Ongelmasi on SDL_SetVideoMode, joka oppaassakin neuvotaan tekemään seuraavasti:
SDL_Surface *ruutu; ruutu=SDL_SetVideoMode(--);
Ja sitten: flippaus tehdään yleensä ihan lopuksi, taitaa tuo toki noinkin toimia mutta yleensä pääsilmukassa tehdään ensin kaikki piirto ja sitten flipataan, ts. laita blit() ennen SDL_Flippiä.
Äh, sen siitä saa kun koodaa pikkutunneilla :)
Tuo flippi oli tuossa kohdassa koska joku irkissä vinkkasi että kannattaa kokeilla vaihtaa sen paikkaa. Nyt toimii kivasti.
Aihe on jo aika vanha, joten et voi enää vastata siihen.