Avatar billede orca Nybegynder
19. januar 2002 - 12:12 Der er 10 kommentarer og
1 løsning

Opfang 2 Keydowns

Hej. Jeg arbejder på et simpelt spil. Her kan man styre et rumskib vha piletasterne på tastaturet. Men problemet er at jeg kun kan opfange een knap ad gange. Så jeg kan ikke opfange at en bruger f.eks vil fremad og til højre på samme tid. Hvordan ordner jeg dette?

Mvh Mark
Avatar billede Techwork Praktikant
19. januar 2002 - 12:25 #1
Det kan du ikke , da keyboardet kun kan opfatte en tast ad gangen. Så du er nok nød til at løse problemet på en anden måde.
Avatar billede tjacob Juniormester
19. januar 2002 - 12:33 #2
De eneste tastetryk der kan genkendes som kombinationer er SHIFT og CTRL og ALT + alle andre taster. Så du skulle måske overveje at gøre skråt fremad til SHIFT + LEFT og SHIFT + RIGHT eller noget lignende.
Avatar billede entracore Nybegynder
19. januar 2002 - 12:38 #3
Det skulle da nok kunne lade sige gøre. Kan du ikke lave en runtine der første opfanger den ene onKeyDownEvent og dernæst den anden event?
Avatar billede orca Nybegynder
19. januar 2002 - 13:43 #4
Det må kunne lade sig gøre? Håber jeg. Mit problem er at hvis nu brugeren holder venstre piltast nede for at dreje skibet mere og mere til venstre, så kan han ikke samtidig sætte fart op/ned. Men det skal han gerne kunne. Jeg opfanger keyDown i en form. Har i nogen forslag?

Mvh Mark
--
www.gameshots.dk
Avatar billede sjh Nybegynder
19. januar 2002 - 15:39 #5
Option Explicit

Private Declare Function GetAsyncKeyState Lib \"user32\" (ByVal vKey As Long) As Integer

Public Function KeyValue() As String
Dim xKeyValue As String
Dim iKeyCounter As Long
  xKeyValue = \"\"
    For iKeyCounter = 32 To 128
      If GetAsyncKeyState(iKeyCounter) <> 0 Then
        xKeyValue = xKeyValue & iKeyCounter
      End If
    Next iKeyCounter
  KeyValue = xKeyValue
End Function

Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)
  Me.Caption = KeyValue
End Sub

Private Sub Picture1_KeyUp(KeyCode As Integer, Shift As Integer)
  Me.Caption = \"\"
End Sub
Avatar billede bernhof Nybegynder
19. januar 2002 - 18:41 #6
du kan også bare benytte Numpad istedet for de små piletaster. Så kan man komme skråt frem til venstre på 7/home, skråt frem til højre på 9/Pg Up osv.
Avatar billede orca Nybegynder
19. januar 2002 - 18:48 #7
sjh -> Jeg prøver mig lige lidt frem med den.

mikbj -> Den dur ikke, for man skal ikke kun kunne bevæge sig i 9 retninger, men kunne dreje langsomt osv.
Avatar billede martinfrost Nybegynder
21. januar 2002 - 11:42 #8
Option Explicit
Dim mleft As Boolean
Dim mright As Boolean
Dim mup As Boolean
Dim mdown As Boolean

\'obj er objektet, der kan flyttes i alle retninger
\'sæt focus i obj og brug piletasterne

Private Sub obj_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = 40 Then
mdown = True
End If

If KeyCode = 37 Then
mleft = True
End If

If KeyCode = 39 Then
mright = True
End If

If KeyCode = 38 Then
mup = True
End If

Call moveobj
End Sub

Private Sub obj_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 40 Then
mdown = False
End If

If KeyCode = 37 Then
mleft = False
End If

If KeyCode = 39 Then
mright = False
End If

If KeyCode = 38 Then
mup = False
End If

End Sub

Private Function moveobj()
If mleft = True Then
obj.Left = obj.Left - 20
End If

If mright = True Then
obj.Left = obj.Left + 20
End If

If mup = True Then
obj.Top = obj.Top - 20
End If

If mdown = True Then
obj.Top = obj.Top + 20
End If

End Function
Avatar billede orca Nybegynder
21. januar 2002 - 18:25 #9
martinfrost -> Uden lige at have prøvet din kode tror jeg heller ikke den virker. Meningen er at man skal kunne holde to knapper nede på samme tid (så skibet både øger fart og drejer samtidig).

Mvh Mark
--
www.gameshots.dk
Avatar billede sjh Nybegynder
21. januar 2002 - 19:29 #10
orca >>Heller ikke mig men den er god nok.
Avatar billede martinfrost Nybegynder
22. januar 2002 - 15:42 #11
Koden jeg har skrevet opfanger 2 keydowns, så du kan bevæge objekter skråt og sådan... Hvis hastigheden i en af retninger skal accelerere, må du naturligvis bare tilføje en formel for acceleration under den ønskede retning - men koden her løser i hvert fald problemet, du beskriver i starten.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester