Kun yritin käyttää näitä kbhit ja getch käskyjä peliohjelmoinnissa, ongelmaksi tuli, ettei kahta nappia voinut pitää yhtäaikaa pohjassa. Selvisi, että näppäimistö lähettää merkin kun joku nappula painetaan pohjaan, kun se nostetaan, mutta ei silloin kun sitä pidetään pohjassa. Onnistuin ratkaisemaan ongelman seuraavasti:
(Watcom C++:lla)
void get_keys(char *keys) { char key_code, scan_code, updown_code, ch; key_code=inp(0x60); scan_code=key_code&127; updown_code=(key_code&128)>>7; keys[scan_code]=updown_code; if(kbhit()) ch=getch(); // Tyhjentää puskuria, ettei piippaa }
Kun ohjelma kutsuu tätä säännöllisesti, se pitää keys-taulukossa tiedot siitä, mikä nappula on pohjassa ja mikä ei... teoriassa. Käytännössä funktioni ei aina huomaa nappulan nostoa, jos jokin muu nappulaa painetaan yhtäaikaa. Silloin nappula "jää jumiin".
Mikä auttaisi? Onko funktioita mahdollista saada jotenkin pyörimään taustalle samaan aikaan muun ohjelman kanssa, vai hoituuka näppäimistö helpomminkin?
Sinun pitää asentaa keskeytyskäsittelijä keskeytykselle 9, eli näppäimistökeskeytyksellä. Siellä sitten tsekkailet ne napinpainallukset, näin ei yksikään painallus/vapautus jää väliin.
Laamis selittää teorian tästä asiasta hyvin että katsos sinne. Sitten vain hankit vielä jostain tietoa että miten noita keskeytyskäsittelijöitä Watcom C++:lla asennellaan.
Google auttanee..
Aihe on jo aika vanha, joten et voi enää vastata siihen.