akristina92 Skrevet 23. november 2004 Del Skrevet 23. november 2004 Hei. Jeg har nettop begynt med VB6.0. Jeg har laget et dritt program hit til. Men jeg lurer på hvordan man kan få noe til å bevege seg via piltastene eller noe sånt? Lenke til kommentar
Jonas Skrevet 24. november 2004 Del Skrevet 24. november 2004 (endret) 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 24. november 2004 av Jonas Lenke til kommentar
aadnk Skrevet 24. november 2004 Del Skrevet 24. november 2004 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
akristina92 Skrevet 24. november 2004 Forfatter Del Skrevet 24. november 2004 Hvordan kan jeg få noe som er inni vinduet til å bevege seg da? Lenke til kommentar
Jonas Skrevet 24. november 2004 Del Skrevet 24. november 2004 (endret) Bare å skifte "Me" med f eks Picture1 eller Image1. Edit: "Me" betyr i dette tilfellet "form1". Hvis koden brukes i form2 betyr det "form2". Endret 24. november 2004 av Jonas Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå