Jonas Skrevet 6. januar 2005 Del Skrevet 6. januar 2005 Den registrerer ingen ting, nei. Du bruker feil måte. I spillprogramering bruker man loops. Å bare oppdatere når brukeren trykker på en knapp er en fin ide, men kansje du vil ha fiender som rører på seg? Animerte fiender? Da funker plutselig ikke denne måten lenger. Jeg har postet et veldig enkelt eksempel på hvordan man lager en loop for spill, og hvordan man stopper ved å trykke Esc. Jeg poster det her også. Bare lim inn koden i et tomt prosjekt: Option Explicit 'Dette er en API som gjør at programmet "venter", og spillet vil ikke kreve mer resurser en nødvendig Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'Dette er en API som sjekker taster Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer 'Når EndGame er true vil spillet stoppes 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 helvete (100% cpu bruk) DoEvents 'Sjekker om brukeren trykker noen knapper, og evt flytter formen SjekkTasteTrykk 'Programmet venter Sleep 10 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 Jo større spillet er, jo mer resurser krever det. Da bør man sette ned Sleep-tiden, eller fjerne den. Lenke til kommentar
Blib Skrevet 6. januar 2005 Forfatter Del Skrevet 6. januar 2005 Skjønner at du gjerne vil ha denne loopen, men jeg har som sagt ikke holdt på med programmering noe særlig lenge og jeg ønsker ikke at denne versjonen av programmet skal inneholde animasjoner eller beveglige fiender (Annet enn eventuelt samtidig som når jeg flytter meg selv). Alt jeg ønsker er å kunne lage spillet på min måte, enkelt og greit, og da helst ved at characteren flytter på seg når du trykker ned en piltast. Og da helst samtidig med at det er mulig å ha noen knapper på skjemaet. Så beklager, men det du kommer med nå er for avansert. Dersom det ikke er mulig å bruke Form_KeyDown når en har knapper på skjemaet bruker jeg heller labels som knapper. Men jeg takker uansett for hjelpen, den kommer sikkert bedre med når jeg ønsker å lage et spill som skal fungere på den måten. Lenke til kommentar
Richard87 Skrevet 6. januar 2005 Del Skrevet 6. januar 2005 Vis du bruker en Keyboardhook så kan du teste tastene etter hvert som de blir trykt ned, istedenfor bruk av en timer... se på: CallNextHookEx SetWindowsHookEx UnhookWindowsHookEx Lenke til kommentar
aadnk Skrevet 7. januar 2005 Del Skrevet 7. januar 2005 Hm. Dersom du ikke ønsker å benytte deg av infløkte teknikker, er vel den eneste muligheten å bruke en PictureBox til å lese alle innkommende tastetrykk. Altså, legg en slik kontroll i formen din (eksempelvis med samme bakgrunnsfarge som formen, slik at brukeren ikke ser den), og se etter KeyDown-hendelsen på denne kontrollen. Ettersom denne PictureBox-en også er en kontroll, i likhet med kommandoboksene, får denne også fokus. Idet man normalt sett ikke kan bruke piltastene for å flytte seg fra en PictureBox, vil dermed brukeren være låst på kontrollen, og den vil motta tastehendelsene sålenge den har fokus. Man kan imidlertid flytte fokus fra boksen og til andre kontroller, men dette kan du fikse ved å automatisk sette fokus til boksen når brukeren skriver: Private Sub Command1_KeyDown(KeyCode As Integer, Shift As Integer) Picture1.SetFocus End Sub 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å