Mitenhän mahtaa olla tuon SDL_GetModState() -funktion kanssa, kun se ei tunnu toimivan ainakaan minulla siten, kuin erinäiset lähteet sen kertovat toimivan? Sen siis pitäisi toimia tähän tapaan:
SDL_PumpEvents(); Uint8* keys = SDL_GetMouseState(NULL); if((SDL_GetModState() & KMOD_SHIFT) && keys[SDLK_ESCAPE]) { // painettiin shiftiä ja esciä }
Tein oikein pienen ohjelman ongelman selvittämistä varten, mutta sekään ei tuottanut tulosta:
#include <cstdio> #include <SDL/SDL.h> int main(int argc, char** argv) { if(SDL_Init(SDL_INIT_VIDEO) < 0) { return EXIT_FAILURE; } SDL_Surface* screen = SDL_SetVideoMode(800, 600, 16, 0); if(!screen) { SDL_Quit(); return EXIT_FAILURE; } Uint8* keys; while(true) { SDL_PumpEvents(); keys = SDL_GetKeyState(NULL); // Ei toimi if((SDL_GetModState() & KMOD_SHIFT) && keys[SDLK_ESCAPE] == SDL_PRESSED) { break; } // Toimii if(keys[SDLK_RETURN]) { break; } } SDL_Quit(); return EXIT_SUCCESS; }
Kellään antaa vinkkiä?
Edit:
SDL:n dokumentaatio: http://www.libsdl.org/cgi/docwiki.cgi/
Googlen tulokset: http://www.google.fi/search?hl=fi&q=SDL_GetModState()&btnG=Hae&meta=
Tarkoituksella vain yksi &?
Gaxx kirjoitti:
if((SDL_GetModState() & KMOD_SHIFT) && keys[SDLK_ESCAPE] == SDL_PRESSED)
Hakoulinen kirjoitti:
Tarkoituksella vain yksi &?
Kyllä.
Ongelmaksi on nyt muodostunut se, että SDL_GetModState() ei reagoi shiftin painamiseen mitenkään(aina sama 4096). Sen sijaan altin ja ctrl:n painamiseen se reagoi.
Heee! Arvatkaapas, mistä kiikasti? Mulla oli joku vanha SDL.dll >_<
Aihe on jo aika vanha, joten et voi enää vastata siihen.