Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

Få noe til å bevege seg!


Anbefalte innlegg

Videoannonse
Annonse

Det finnes flere måter å gjøre det på. Du vil begynne å lage et spill, right? Det beste du kan gjøre da, er å lage en loop som hele tiden sjekker tastene. Loopen trenger du videre i spiller også ;)

 

Lim alt dette inn i et nytt prosjekt:

Edit: Du styrer med piltastene.

Option Explicit

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

Dim EndGame As Boolean

Private Sub Form_Unload(Unload As Integer)

EndGame = True

End Sub

Private Sub Form_Load()

'Siden programmet aldri vil komme ut av form_load
'må vi Show'e formen
Me.Show

'Og vi starter "spillet"
GameLoop

End Sub

Private Sub GameLoop()

'Lage en loop helt til en variabel stopper den
Do Until EndGame = True
   
   'Så går ikke pc'en til hellvete (100% cpu bruk)
   DoEvents
   
   SjekkTasteTrykk
   
Loop

End

End Sub

Private Sub SjekkTasteTrykk()

'Hvis spilleren trykker escape, stopper spiller
If Not GetAsyncKeyState(vbKeyEscape) = 0 Then EndGame = True

'Sjekker piltastene og flytter formen hvis noen er trykker ned
If Not GetAsyncKeyState(vbKeyUp) = 0 Then Me.Top = Me.Top - 15
If Not GetAsyncKeyState(vbKeyDown) = 0 Then Me.Top = Me.Top + 15
If Not GetAsyncKeyState(vbKeyLeft) = 0 Then Me.Left = Me.Left - 15
If Not GetAsyncKeyState(vbKeyRight) = 0 Then Me.Left = Me.Left + 15

End Sub

Endret av Jonas
Lenke til kommentar

Det kan også være greit å inkludere et Sleep-kall i koden for å gi samme hastighet og ytelse på de fleste datamaskiner, samt en minsking ressursbruk på nærmere 100% målt i CPU-bruk, selv om det ikke markant går tregere.

 

For å gjøre dette legger man denne linjen inn i etter Option Explicit sammen med den andre deklarasjonen (GetAsyncKeyState) og før EndGame-linjen:

 

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

 

I tillegg må du endre GameLoop prosedyren til dette:

 

Private Sub GameLoop()

'Lage en loop helt til en variabel stopper den
Do Until EndGame = True
     
  SjekkTasteTrykk

  'Så går ikke pc'en til hellvete (100% cpu bruk)
  DoEvents
  
  ' Slik at vi ikke benytter unødig CPU-kraft
  Sleep 10 
  
Loop

End

End Sub

 

En enklere metode, dog med sine ulemper, er å kun svare på hendelses-kallet KeyDown i formen:

 

Option Explicit

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

If KeyCode = vbKeyLeft Then Me.Left = Me.Left - 15
If KeyCode = vbKeyRight Then Me.Left = Me.Left + 15
If KeyCode = vbKeyUp Then Me.Top = Me.Top - 15
If KeyCode = vbKeyDown Then Me.Top = Me.Top + 15
If KeyCode = vbKeyEscape Then Unload Me

End Sub

 

Som også kan skrives på denne måten, om du vil ta i bruk en mer sofistikert kodeteknikk:

 

Option Explicit

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

Select Case KeyCode
Case vbKeyLeft
   Me.Left = Me.Left - 15
   
Case vbKeyRight
   Me.Left = Me.Left + 15
   
Case vbKeyUp
   Me.Top = Me.Top - 15
   
Case vbKeyDown
   Me.Top = Me.Top + 15
   
Case vbKeyEscape
   Unload Me
   
End Select

End Sub

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...