Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Näppäimistöohjaus pelissä

Sivun loppuun

AntiKamel [10.09.2004 14:17:15]

#

Tällä hetkellä on työn alla pieni pelintapainen, jossa olisi tarkoitus ohjailla pelihahmoa nuolinäppäimillä. Tuossa koodaillessa huomasin että jos vaikka painaa oikean nuolinäppäimen pohjaan, jolloin hahmoin tulisi liikkua koko näppäimen painalluksen ajan oikealle, ohjelma lukee aluksi yhden "nuolen" , eli liikuttaa ukkelia nykäyksen, odottaa sitten n. sekunnin, ja sitten vasta alkaa syöttämään nuolta yhtäjaksoisesti.

Tämä ei siis kuitenkaan ole kovin toivottu ilmiö, vaan tuo "viive" pitäisi saada pois. Onko tätä mahdollista kiertää/poistaa ohjelmoimalla, vai onko ainut vaihtoehto BIOS:n näppäimistöasetusten muuttaminen. Käytössä on VB6.0

tuomas [10.09.2004 14:30:52]

#

Mihinkäs proseduuriin sitä on koodi tungettu?
Kokeileppas vaikka keydown proseduuria..

AntiKamel [10.09.2004 14:36:31]

#

On keydown:lla tehty, mutta se kun ei tahdo lukea syötettä yhtäjaksoisesti. Koodi ei ole nyt käsillä kun oon töissä, mikäli se nyt asiaan mitää auttaa.

Metabolix [10.09.2004 14:43:07]

#

Laita muuttujataulukko (vaikka Booleaneja), aseta tiettyyn muuttujaan True Keydownissa ja False Keyupissa (kai VB:ssä on sellainen?), ja tarkista jatkuvasti, mikä on näppäimen tila.
Parempi olisi tehdä tarkistus suoraan GetAsyncKeyState -funktiolla.
Reaaliaikaisissa peleissä yleensä luetaan näppäimet aina ennen piirtovaihetta ja liikutetaan tyyppiä oikeaan suuntaan kuluneen ajan mukaan; piirtämisen kesto voi vaihdella.

Viestin loppuun ei muuten tarvita tyhjiä rivejä...

AntiKamel [10.09.2004 14:47:09]

#

Pahoittelut tyhjistä riveistä.

Ja kiitokset noista vinkeistä ,pitää kokeilla noita kunhan pääsee koodin ääreen.

edit: kirjootusvirhe

thefox [11.09.2004 00:56:44]

#

GetAsyncKeyState funktioita voi tietysti käyttää mutta se ei ole suositeltavaa koska se palauttaa näppäinten painalluksia globaalisti vaikka ikkunalla ei olisikaan fokusta. Eli mieluummin noilla KeyDown ja KeyUp (tjsp) eventeillä. Tietysti voit käyttää myös esim. DirectInputtia jos väännät laajempaa peliä ja tarvetta ilmenee.

Metabolix [12.09.2004 00:24:27]

#

GetAsyncKeyState-funktioon voi vielä liittää Booleanin, joka on False tai True sen mukaan, onko ikkuna aktiivinen. Sen taas saa varmasti jostakin onActivate / OnDeactivate-jutuista.

nomic [13.09.2004 11:49:47]

#

Helppo tapa on ainaskin, esim:

if näppäintä painetaan pohjaan then
 liikutetaan
elseif emme paina enään nappia then
 emme liikuta
end if

Ääh, Fawks ehti jo selittää, sen mihin pyrin...
Mutta kyllä pitäytyisin ennemmin, GetAsyncKeyState-funktiossa, niinkuin Metabolix jo kertoi :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta