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.