Det kan godt være det bare er mig, men jeg synes ikke at KeyDown proceduren bliver afviklet tit nok til at man kan få en flydende bevægelse, istedet bevæger den sig i hak enten op eller ned, og reagere meget langsomt. Desuden kan man heller ikke bevæge sig i en blandet retning af op og til siden på denne måde, men det er jo irrelavant i et ping pong spil hvor man kun skal kunne bevæge sig op og ned.
Reactionstiden kan kun ændres med et API kald, hvilket jeg ikke lige kender til, men der findes sikkert et!
Dim MoveUp As Boolean
Dim MoveDown As Boolean
Const Distance As Integer = 60
Private Sub picMe_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 38
MoveUp = True
Case 40
MoveDown = True
End Select
End Sub
Private Sub picMe_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 38
MoveUp = False
Case 40
MoveDown = False
End Select
End Sub
Private Sub tmrMove_Timer()
DoEvents
If MoveUp = True Then
picMe.Top = picMe.Top - Distance
End If
If MoveDown = True Then
picMe.Top = picMe.Top + Distance
End If
End Sub
Som du kan se kan man med en Timer få et billed (picMe) til at bevæge sig i en vis retning, et lille stykke af gangen, indtil den modtager at knappen er blevet løftet.
Denne metode har dog den ulempe at billedet en sjælden gang vil bevæge sig uregelmæssigt hvilket måske ser lidt forvirrende ud at den pludselig bevæger sig længere end normalt.
Et tip til at nedsætte denne uregelmæssighed er at sætte Intervallet på Timeren op og selvfølgelig også konstanten Distance således at hastigheden ikke ændre sig. Dette gør at computeren ikke bare flytter den det lille stykke så hurtigt som den overhovedet kan, men faktisk overholder det Interval du har skrevet.
Dette problem er dog stort set fjernet efter jeg opdagede at DoEvents kunne få den til at overholde Intervallet selvom du sætter det ned på 1 millisekund!
// Great programs often follow great brains!