-
can someone do the explanation as to why the left & right here work, but the up & down don't ???
Code:
Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer
Private Sub Timer1_Timer()
If GetKeyState(vbKeyLeft) And &H8000 Then Picture1.Left = Picture1.Left - 20
If GetKeyState(vbKeyRight) And &H8000 Then Picture1.Left = Picture1.Left + 20
If GetKeyState(vbKeyUp) And &H8000 Then Picture1.Left = Picture1.Top - 20
If GetKeyState(vbKeyDown) And &H8000 Then Picture1.Left = Picture1.Top + 20
End Sub
Doesn't make sense to me. Thanks :)
-
I dunno why your code doesnt work.
But why dont you try this approach, its smoother by far !
Just give it a go and you'll see.
Code:
Option Explicit
Private keyUp As Boolean
Private keyDown As Boolean
Private keyLeft As Boolean
Private keyRight As Boolean
Private LastTick As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyLeft:
keyLeft = True
keyRight = False
Case vbKeyRight:
keyLeft = False
keyRight = True
Case vbKeyUp:
keyUp = True
keyDown = False
Case vbKeyDown:
keyUp = False
keyDown = True
End Select
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyLeft:
keyLeft = False
Case vbKeyRight:
keyRight = False
Case vbKeyUp:
keyUp = False
Case vbKeyDown:
keyDown = False
End Select
End Sub
Private Sub RunLoop()
Do
DoEvents
If ((GetTickCount - LastTick) > 50) Then
LastTick = GetTickCount
Select Case True
Case keyUp:
Picture1.Top = Picture1.Top - 20
Case keyDown:
Picture1.Top = Picture1.Top + 20
End Select
Select Case True
Case keyLeft:
Picture1.Left = Picture1.Left - 20
Case keyRight:
Picture1.Left = Picture1.Left + 20
End Select
End If
DoEvents
Loop
End Sub
Private Sub Form_Load()
Me.Show
RunLoop
End Sub
-
Code:
Private Sub Timer1_Timer()
If GetKeyState(vbKeyLeft) And &H8000 Then Picture1.Left = Picture1.Left - 20
If GetKeyState(vbKeyRight) And &H8000 Then Picture1.Left = Picture1.Left + 20
If GetKeyState(vbKeyUp) And &H8000 Then Picture1.Left = Picture1.Top - 20
If GetKeyState(vbKeyDown) And &H8000 Then Picture1.Left = Picture1.Top + 20
End Sub
I hope you'll notice the bug
-
Ya know, I never even bothered checking if the code was dodgy when I tried it ...
-
i didn't even try it :rolleyes: alex code fullfills it purpose so i didn't bother rewrite it
-