Hei!
Eli olen nyt törmännyt sellaiseen ongelmaan, etten saa näppäimistön syötteitä toimimaan. Yritän käyttää täällä olevan SDL-ohjeesta löytyviä ohjeita, mutten saa toimimaan millään. Tässä on koodi:
#include "SDL.h"; void piirrakuva(SDL_Surface *naytto, SDL_Surface *kuva, int kuvax, int kuvay, int korkeus, int leveys, int nayttox, int nayttoy); int main(int argc, char *argv[]) { SDL_Init(SDL_INIT_EVERYTHING); SDL_Surface *kuva; SDL_Surface *naytto; int x=0; Uint8* nappi; nappi=SDL_GetKeyState(NULL); naytto=SDL_SetVideoMode(640,400,32,SDL_HWSURFACE|SDL_DOUBLEBUF); kuva=SDL_LoadBMP("Test.bmp"); while (x==0) {SDL_PumpEvents; if (nappi[SDLK_SPACE]) {piirrakuva(naytto,kuva,0,0,100,100,10,10); x=1;} else x=0;} SDL_FreeSurface(kuva); SDL_Delay(1000); return 0; }
piirrakuva-funktiota en sisällyttänyt, koska se toimii.
Lisäksi kysyisin miten voin määrittää event.key:n, jotta voin katsoa jonkun tietyn näppäimen pohjaan painumista ja nousemista? Sitä ei nimittäin selitetä missään kohtaa ohjeita.
kannattaa etsiä monipuolisempi sdl-opas
matopelioppaasta kopioitu valmis funktio kyseiseen toimintoon.
// Kertoo napin nykytilan. bool ohjelma::lue_nappi(nappi n) { // Käsketään SDL:n hoitaa viestit, jolloin sen tieto napeista päivittyy. SDL_PumpEvents(); // Tarkistetaan pyydetty nappi. Uint8 *napit = SDL_GetKeyState(0); switch (n) { case NAPPI_VASEN: return napit[SDLK_LEFT]; case NAPPI_OIKEA: return napit[SDLK_RIGHT]; case NAPPI_ENTER: return napit[SDLK_RETURN]; case NAPPI_ESCAPE: return napit[SDLK_ESCAPE]; default: return false; } }
Matopelioppaan osa 2 toimii useimien pelien valmiina pohjana., kunhan siitä ensin karsii kaiken tähän peliin liittyvän pois.
Koodissasi on vikana se, että rivi "SDL_PumpEvents;" ei tee mitään, koska siitä puuttuvat funktiokutsussa tarvittavat sulut. Sinulle huomautettiin ihan vastaavasta virheestä jo viimeksi. Opettele käyttämäsi kielen alkeet kunnolla ja laita kääntäjästä kaikki mahdolliset varoitukset näkyviin, niin vältät tällaiset virheet.
Ja opettele ihmeessä kirjoittamaan koodia myös siististi. Ruman koodin kirjoittaminen on sekin virhe. Virheiden löytäminenkin on paljon vaikeampaa, jos koodi on lukukelvotonta.
Tässä korjattu koodi:
#include "SDL.h" void piirrakuva(SDL_Surface *naytto, SDL_Surface *kuva, int kuva_x, int kuva_y, int korkeus, int leveys, int naytto_x, int naytto_y); int main(int argc, char *argv[]) { SDL_Init(SDL_INIT_EVERYTHING); SDL_Surface *naytto = SDL_SetVideoMode(640, 400, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); SDL_Surface *kuva = SDL_LoadBMP("Test.bmp"); Uint8 *nappi = SDL_GetKeyState(NULL); int x = 0; while (x==0) { SDL_PumpEvents(); if (nappi[SDLK_SPACE]) { piirrakuva(naytto, kuva, 0, 0, 100, 100, 10, 10); x=1; } else x=0; } SDL_FreeSurface(kuva); SDL_Delay(1000); return 0; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.