Tätä jo keskustelualueellakin kysyttiin. Miten saada kuva seuraamaan hiirtä. Tarvitset hiiri.bmp tiedoston, joka sisältää kuvan, "hiiren kursoriksi". Jos haluat kuvan hiiren "keskelle", miinusta x ja y koordinaateista puolet kuvan koosta. Blittausfunktio putkan oppaasta lainattu. Dev-C++:sassa kääntyy parametrein: -lmingw32 -lSDLmain -lSDL
#include <SDL/SDL.h> SDL_Surface *ruutu, *hiiri; // Pinnat SDL_Event tapahtumat; //Tapahtumat Uint8 *nappi; //Napeille kahva int hiiriX, hiiriY; //Hiiren koordinaatit void blitKuva(SDL_Surface *minne, SDL_Surface *mika, int x, int y); // Funktion proto int main(int argc, char *argv[]) { SDL_Init(SDL_INIT_VIDEO); //SDL Päälle ruutu = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); SDL_WM_SetCaption("HiirenLoukku", NULL); //Otsikko SDL_ShowCursor(0); //Oikea kursori piiloon hiiri=SDL_LoadBMP("hiiri.bmp"); //Ladataan kuva SDL_SetColorKey(hiiri, SDL_SRCCOLORKEY, SDL_MapRGB(hiiri->format, 255, 255, 255)); //Valkoinen väri läpinäkyväksi "kursorista" while (true) //Päälooppi { SDL_FillRect(ruutu, NULL, SDL_MapRGB(ruutu->format, 0, 0, 0)); //Ruutu tyhjäksi SDL_PollEvent(&tapahtumat); //Tapahtumat talteen nappi = SDL_GetKeyState(NULL); //Napit talteen if (nappi[SDLK_ESCAPE])break; //Jos ESC pohjassa, ulos if (tapahtumat.type==SDL_QUIT)break; //Jos ikkuna suljettu, ulos SDL_GetMouseState(&hiiriX, &hiiriY); //Hiiren koordinaatit talteen blitKuva(ruutu, hiiri, hiiriX, hiiriY); //Kursori ruudulle SDL_Delay(1); //Jotta ei käytettäisi liikaa tehoja SDL_Flip(ruutu); } SDL_ShowCursor(1); //Kun lopetetaa, oikea kursori takaisin (ei (kai) pakollinen) SDL_Quit(); //Ulos return 0; //Nappiin meni... } void blitKuva(SDL_Surface *minne, SDL_Surface *mika, int x, int y) //Funktio blittaukseen, ei tästä sen enempää { SDL_Rect piirtoAlue; piirtoAlue.x=x; piirtoAlue.y=y; SDL_BlitSurface(mika, NULL, minne, &piirtoAlue); }
<pilkunviilaus>Miksi käyttää SDL_DOUBLEBUF:ia jossei käytä SDL_UpdateRectiä</pilkunviilaus> :-)
Tohon blittausfunktioon oli jäänyt ylimääräinen parametri. Korjattu.
Hyvä koodivnkki ja toimikin jo ekalla kerralla.
ei globaalimuuntajia!
yhtä hyvin ne vois välittää parametseina tolle funktiolle.
Oisko binääriä tääl ohjelmointiputkassa vois olla sellanen näis koodivinkeissä et voi uploadaa binäärin ja sit aina alussa ois linkki binääriin
lainaus:
<pilkunviilaus>Miksi käyttää SDL_DOUBLEBUF:ia jossei käytä SDL_UpdateRectiä</pilkunviilaus> :-)
Koska kaksoispuskurointi on parempi.
lainaus:
ei globaalimuuntajia!
yhtä hyvin ne vois välittää parametseina tolle funktiolle.
Kyseessä on pieni ohjelma, joten globaalien muuttujien käyttö ei haittaa.
aWW, mitä pienempi ohjelma sitä helpommin ne voi välittää funktiolle :)
Itse pyrin siihen ettei ole yhtään globaalia muuttujaa
Eikös tuo hiiri.bmp pidä vapauttaa lopuksi?
SDL_FreeSurface(hiiri.bmp);
hiiri.bmp:n kuvan tulee olla RGB-väreissä. Harmaasävy ei ainakaan käy, vaan tulee coredumppi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.