vart kan jag läsa om hur man använder sig av keydown m.m , Hej, <code> tycker MizardX's kod är lite väl onödig lång...räcker ju med jonathans kod ju..även fast dom gör precis samma sak... nej...dom gör precis likadant..båda koderna...bara att den sista koden är lite väl lång... skillnaden är väl att man kan ställa in hastigheten genom timern..? Du har fel. Det första exemplet kan man ej styra diagonalt t.ex up & höger sammtidigt. Eftersom enbart den senaste tangent upprepas.<br> Hej,styrning
jagh vill kunna styra tex en boll, med thälp av piltangenterna.
finns det nån tutorial på hur man gör det?Sv: styrning
Så här kan du göra med keydown:
<code>
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyRight
Shape1.Left = Shape1.Left + 50
Case vbKeyLeft
Shape1.Left = Shape1.Left - 50
Case vbKeyUp
Shape1.Top = Shape1.Top - 50
Case vbKeyDown
Shape1.Top = Shape1.Top + 50
End Select
End Sub
</code>
För mig låter det som om du kanske vill kunna styra någonting i till
exempel ett spel? I så fall så funkar inte keydown speciellt bra för den
kan bara ta emot en knapptryckning samtidigt, men det finns ett
exempel i tips & tricks ( [Känna av flera knapp tryckningar samtidigt i ren VB-kod...] ) som beskriver hur du gör för att känna
av flera tangenttryckningar samtidigt.
/JonatanSv: styrning
Dim dLeft As Boolean, dRight As Boolean
Dim dUp As Boolean, dDown As Boolean
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyRight
dRight = True
Case vbKeyLeft
dLeft = True
Case vbKeyUp
dUp = True
Case vbKeyDown
dDown = True
End Select
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyRight
dRight = False
Case vbKeyLeft
dLeft = False
Case vbKeyUp
dUp = False
Case vbKeyDown
dDown = False
End Select
End Sub
Private Sub Timer1_Timer()
If dRight Then Shape1.Left = Shape1.Left + 50
If dLeft Then Shape1.Left = Shape1.Left - 50
If dUp Then Shape1.Top = Shape1.Top + 50
If dDown Then Shape1.Top = Shape1.Top - 50
End Sub
</code>Sv: styrning
tycker BJSv: styrning
Sv: styrning
om man gör på jonatans sätt flyttas väl shapen beroende på hur snabb upprepningshastighet man har satt på tangentbordet.Sv: styrning
<br>
Det andra exemplet är ett bättre sätt att utföra det på. Vilket gör att den rör sig både upp och vänster samttidigt.<br>
<br>
Fast jag föreslår att man förändrar koden i timern lite.
Stället för att flytta den fyra gånger, som kommer ske om alla fyra knappar är nedtryckna, enbart en gång.
<code>
Private Sub Timer1_Timer()
Dim NewLeft As Single
Dim NewTop As Single
If dRight Then NewLeft = NewLeft + 50
If dLeft Then NewLeft = NewLeft - 50
If dUp Then NewTop = NewTop + 50
If dDown Then NewTop = NewTop - 50
Shape1.Move Shape1.Left + NewLeft, Shape1.Top + NewTop
End Sub
</code>Sv: styrning
Jag tänkte precis som bj först, men innan jag klagade så testade jag koden, vilket var tur för jag upptäckte faktiskt att man kunde flytta shapen diagonalt och det kan man ju inte med min kod. =)
/Jonatan