2012-11-29 12 views
5

Sto facendo un piccolo gioco con sprite in cui il personaggio si sposta a seconda del tasto premuto (frecce). Ho notato che il metodo .KeyDown() continua a essere chiamato fino a qualsiasi chiave rilasciata.Problema semplice ma complicato con KeyDown() in C#

ad es. Quando l'utente preme la freccia su, il metodo di .KeyDown() continua a essere chiamato. Se si preme la freccia giù, sempre con la freccia su premuto, lo KeyEventArgs riceve ora l'input dalla freccia giù. Infine, quando viene rilasciata la freccia su, l'evento .KeyDown() smette di essere chiamato anche se la freccia giù viene ancora premuta.

Come faccio a "reimpostare" l'input e dire al compilatore di continuare a chiamare .KeyDown()?

+0

Avete provato a registrare quale chiave è responsabile per KeyDown in modo da poter controllare quando si rilascia un rilascio chiave? In questo modo, puoi continuare ad andare avanti come se la chiave fosse ancora inattivo fino a quando la chiave che ti interessa è quella che ha avviato la versione. – RonaldBarzell

+0

Se la logica di gioco si trova in un loop di eventi in tempo reale, basta chiamarlo: 'Form_KeyDown (null, e)' –

risposta

3

Un'ottima domanda: non credo che ci sia un modo per ignorare questo comportamento predefinito, ma sarebbe certamente possibile evitare questo effetto tenendo traccia delle pressioni dei tasti da soli, ad esempio, quando viene chiamato .KeyDown(), aggiungere la chiave per un tipo di struttura che tiene traccia di esso- e quindi, quando viene chiamato .KeyUp(), rimuovere la chiave da quella struttura.

Quindi, controllare ripetutamente quella struttura per i tasti attualmente premuti e basare il movimento su che non è quello che dice .KeyDown().

+0

Tenere traccia di keydown e keyup è l'unico modo che ho trovato per gestirlo. Ho una matrice con 255 pollici, ogni elemento corrispondente a un codice chiave. Ogni volta attraverso il loop li ho impostati su 0 (non premuto), 1 (premuto di recente) o 2 (ancora premuto). L'ho fatto perché alcune funzionalità vorrai continuamente (come usare i tasti cursore per spostarti) e ad alcuni ti interesserà solo la pressione iniziale del tasto (come 'M' per attivare l'HUD). – kbelder

0

È possibile provare a utilizzare KeyUp per rilevare quando viene rilasciata la chiave. Quindi è possibile presumere che il tasto sia ancora premuto fino alla chiamata di KeyUp.