Tervehdys
Koska tiedän miten tylsää putkalaisilla on, ja halu auttaa on kova ja autettavia on kovin vähän niin laitan oman kontribuutioni auttaakseni putkalaisia auttamaan apua tarvitsevia.
Eli SDL:ään aloin tutustumaan juurikin äskettäin, ja se sujuikin kivasti Heikin oppaan turvin. Nyt kuitenkin mietityttää miksei seuraava koodi piirrä kuvaa hiiren uusiin koordinaatteihin kun liikutan hiirtä? Kuva piirtyy vain siihen paikkaan missä kursori on ohjelman käynnistettäessä.
Ongelma siis nähdäkseni jostain syystä tuossa for-silmukassa.
#include <SDL/SDL.h> // sisällytetään SDL:n otsikkotiedostot #pragma comment(lib, "SDLmain.lib") // otetaan SDL:n LIB-tiedostot mukaan. Kun nämä rivit ovat ohjelman alussa, #pragma comment(lib, "SDL.lib") // sinun ei tarvitse lisätä LIB-tiedostoja "käsin" void PiirraKuva(SDL_Surface *kuva, SDL_Surface *naytto, int x, int y); int main(int argc, char *argv[]) { if( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "SDL:n alustus ei onnistunut: %s\n", SDL_GetError()); // virheestä tiedot tiedostoon return 0; // lopetetaan ohjelma } SDL_Surface *naytto; SDL_Surface *kuva; kuva=SDL_LoadBMP("ukko.bmp"); naytto = SDL_SetVideoMode(1280, 800, 32, SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF); int hiiri, x, y; for (int i = 0; i < 100; i++) { hiiri = SDL_GetMouseState(&x, &y); PiirraKuva(kuva, naytto, x, y); SDL_Delay(50); SDL_Flip(naytto); } SDL_FreeSurface(kuva); SDL_Quit(); return 0; } // funktio piirtää parametrina annetun kuvan ruudulle (toinen parametri) tiettyyn kohtaan (3. ja 4. parametri) void PiirraKuva(SDL_Surface *kuva, SDL_Surface *naytto, int x, int y) { SDL_Rect alue; alue.x = x; alue.y = y; SDL_BlitSurface(kuva, NULL, naytto, &alue); // piirto }
Viestit pitää käsitellä tavalla tai toisella, jotta SDL:n sisäinen tila päivittyisi. Jos et tee niillä mitään, voit käyttää funktiota SDL_PumpEvents, muussa tapauksessa sinun täytyy lisätä erillinen silmukka, joka käsittelee kaikki tarjolla olevat viestit funktiolla SDL_PollEvent (ks. funktio viestit
tästä vinkistä). Kolmas vaihtoehto on SDL_WaitEvent, joka pysähtyy odottamaan, että jotain tapahtuu.
Ok, kiitos. Pitääpä tutkia seuraavaksi noita viestejä tarkemmin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.