Toon posts:

[C++] Win32 WM_KEYDOWN repeat count

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met een klein spelletje geprogrammeerd in C++ met behulp van de Win32 API. De speler beweegt door middel van de pijltjestoetsen. Nu controleer ik bit 30 van lParam om te kijken of de speler de toets al weer heeft losgelaten. Dit werkt niet zo lekker voor de gebruiker maar als ik de toets in laat houden worden er massa's WM_KEYDOWN's verwerkt.

Nu heb ik een wachttijd ingeschakeld dat als er een toets wordt ingedrukt, pas na een paar milliseconden verwerkt wordt. Maar dan zit ik met het probleem dat er nog een boel berichten in de rij staan. Hoe moet ik dit aanpakken? Hoe moet ik er voor zorgen dat de speler niet te snel beweegt als er een heleboel berichten binnen komen?

Dit heb ik tot nu toe als test gebruikt:
code:
1
2
3
4
5
6
7
    case WM_KEYDOWN:
        {
            if(timeGetTime() > (timer + 500))  // TODO: Tijddelay veranderen.
            {
                timer = timeGetTime();
                x += 5;
            }

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-02 19:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

wat dacht je van WM_KEYUP ?
Bovendien moet je gewoon een boolean zetten die aangeeft of de knop is ingedrukt. In de gameloop gebruik je deze boolean vervolgens om x al dan niet te wijzigen.

[ Voor 76% gewijzigd door .oisyn op 27-06-2006 14:59 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Ok bedankt, ik ga een bool zetten als de toets is ingedrukt. Volgens mij wordt WM_KEYUP als het toetsenbord berichten gaat herhalen maar 1 keer verzonden. Dan heeft dat volgens mij niet zoveel nut.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-02 19:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het punt is dat je wilt weten wanneer een toets wordt ingedrukt en wanneer hij weer wordt losgelaten. De meerdere keydowns die je krijgt hebben te maken met de typematic rate en delay van je toetsenbord, maar in een game is dat allesbehalve interessant.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Misschien ben je nog geinteresserd in GetAsyncKeyState. Hiermee kun je op elk gewenst moment de status van een willekeurige toets bepalen. De windows messages negeer je dan gewoon.

  • KopjeThee
  • Registratie: Maart 2005
  • Niet online
Verwijderd schreef op dinsdag 27 juni 2006 @ 14:56:
Hoe moet ik er voor zorgen dat de speler niet te snel beweegt als er een heleboel berichten binnen komen?
Het lijkt mij dat de snelheid constant moet zijn. De verplaating moet afhangen van de verstreken tijd sinds de laatste update, wat niets te maken zou moeten hebben met het aantal events oid.

Verwijderd

Topicstarter
Ok, bedankt voor de snelle reacties. Ik denk dat ik er nu wel uit kom. Ik ga een boolean gebruiken om te kijken of een key down is, zoja zet ik hem. Zodra de toets weer losgelaten is zal hij weer false worden zodat er niets meer uitgevoerd wordt.
Pagina: 1