Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ongelmia SDL kanssa osa 2: Näppäimistö

jorre [08.12.2012 14:36:24]

#

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.

TVdata [08.12.2012 15:58:00]

#

kannattaa etsiä monipuolisempi sdl-opas

Teuro [08.12.2012 20:11:45]

#

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.

Metabolix [08.12.2012 21:43:20]

#

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.

The Alchemist [09.12.2012 09:42:21]

#

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;
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta