[VB.net] Key down event

Pagina: 1
Acties:

  • mpie
  • Registratie: Maart 2001
  • Laatst online: 25-01-2016
Ik probeer voor het spelletje pong de keydown event voor de paddles te gebruiken. De beide paddles kunnen bewegen, maar zodra beide spelers tegerlijkertijd de paddles willen bewegen dan lukt dit niet. Iemand een oplossing hiervoor?
source hieronder voor degene die het relevant vinden :
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
        If e.KeyCode = Keys.W Then
            p1Ypositie -= 10 'player 1 omhoog
        ElseIf e.KeyCode = Keys.X Then
            p1Ypositie += 10 'player 1 omlaag
        End If

        If e.KeyCode = Keys.Up Then
            p2Ypositie -= 10 'player 2 omhoog
        ElseIf e.KeyCode = Keys.Down Then
            p2Ypositie += 10 'player 2 omlaag
        End If
    End Sub

Wat je wil is niet altijd wat je nodig hebt!


Verwijderd

Ik heb nog nooit met Keycodes gewerkt maar zou het niet logischer zijn moest je ook dit gebruiken:
If e.Keycode = Keys.W AND e.Keycode = Keys.X Then
...
Of kan je Keys.WX doen?
Je moet ze gewoon allebei tegelijk ook aankunnen :)

  • mpie
  • Registratie: Maart 2001
  • Laatst online: 25-01-2016
Verwijderd schreef op 21 June 2003 @ 15:15:
Ik heb nog nooit met Keycodes gewerkt maar zou het niet logischer zijn moest je ook dit gebruiken:
If e.Keycode = Keys.W AND e.Keycode = Keys.X Then
...
Of kan je Keys.WX doen?
Je moet ze gewoon allebei tegelijk ook aankunnen :)
als je e.Keycode = Keys.W AND e.Keycode = Keys.X gaat doen dan betekent het dat je ze tegerlijk in moet drukken om de paddle te kunnen bewegen.

Wat je wil is niet altijd wat je nodig hebt!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Duh. Enig idee waarom je paddles blijven bewegen als je de toets neergedrukt houdt?

Want je vangt maar 1 keydown event af en toch blijft het ding wonderlijk genoeg bewegen toch? :)

Professionele website nodig?


  • mpie
  • Registratie: Maart 2001
  • Laatst online: 25-01-2016
hoe kan ik dit oplossen voor player 2 dan?

Wat je wil is niet altijd wat je nodig hebt!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Je snapt 'm niet dus... welk event vang je af? De keydown? Wanneer *verwacht* je de dat die optreedt? Je beweegt 10 pixels in die Keydown event? Hoe kan het ding dan blijven bewegen als je de toets ingedrukt houdt?

Professionele website nodig?


  • mpie
  • Registratie: Maart 2001
  • Laatst online: 25-01-2016
curry684 schreef op 21 June 2003 @ 17:02:
Je snapt 'm niet dus... welk event vang je af? De keydown? Wanneer *verwacht* je de dat die optreedt? Je beweegt 10 pixels in die Keydown event? Hoe kan het ding dan blijven bewegen als je de toets ingedrukt houdt?
Hij blijft wel bewegen als ik een van de toetsen ingedrukt houdt, maar niet als player 2 ook een toets ingedrukt houdt. Ik gebruik een timer event die steeds refresht.

Wat je wil is niet altijd wat je nodig hebt!


  • mpie
  • Registratie: Maart 2001
  • Laatst online: 25-01-2016
Hij blijft wel bewegen als ik een van de toetsen ingedrukt houdt, maar niet als player 2 ook een toets ingedrukt houdt. Ik snap wat je bedoelt met dat als je een andere toets indrukt dat de vorige toets die ingedrukt is niet meer af kan gaan. Maar das juist mijn probleem. Ik weet niet hoe op te lossen.

[oeps er ging iets mis met de post]

[ Voor 27% gewijzigd door mpie op 21-06-2003 17:37 ]

Wat je wil is niet altijd wat je nodig hebt!


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Ok ff wat pseudo code die je mischien kan helpen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
dim p1down as boolean = false
dim p1up as boolean = false
dim p2down as boolean = false
dim p2up as boolean = false

sub keydown
  select case e.keycode
    case keys.a
      p1up = true
    case keys.b
      p1down = true
    case keys.j
      p2up = true
    case keys.m
      p2down = true
  end select
end sub

sub keyup
  select case e.keycode
    case keys.a
      p1up = false
    case keys.b
      p1down = false
    case keys.j
      p2up = false
    case keys.m
      p2down = false
  end select
end sub

sub timer_tick
  if p1up then
    p1pos += 1
  else if p1down then
    p1pos -= 1
  end if
  if p2up then
    p2pos += 1
  else if p2down then
    p2pos -= 1
  end if
end sub


Ik hoop dat je het idee een beetje begrijpt. Anders moet je maar ff om wat uitleg vragen.

Noushka's Magnificent Dream | Unity


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

mpie schreef op 21 June 2003 @ 17:32:
[...]

Hij blijft wel bewegen als ik een van de toetsen ingedrukt houdt, maar niet als player 2 ook een toets ingedrukt houdt. Ik gebruik een timer event die steeds refresht.
Sja ik probeerde je logisch denken wat te stimuleren maar het slaat niet zo aan geloof ik (nofi :Y) )

Op het moment dat een toets ingedrukt wordt krijg je een WM_KEYDOWN, op het moment dat ie losgelaten wordt een WM_KEYUP. Typematic settings genereren op hardware niveau nieuwe WM_KEYDOWN's zolang de toets ingedrukt is, *totdat* er een nieuwe toets ingedrukt wordt want dan houdt de hardwarematige typematic op. Je krijgt echter *wel* dan nog een WM_KEYUP zodra de eerste toets losgelaten wordt.

Wat je dus moet doen: op WM_KEYDOWN een vlaggetje zetten. Op WM_KEYUP releasen. En met je timer alleen maar die vlaggetjes checken en de relevante beweging uitvoeren. Werkt perfect hoor O-)

edit:
ps. dit is dus wat Michali in z'n code al doet maar ik ben meestal niet zo genereus met code schrijven ;)

[ Voor 6% gewijzigd door curry684 op 21-06-2003 23:13 ]

Professionele website nodig?

Pagina: 1