Stig Jøran Skrevet 7. november 2006 Skrevet 7. november 2006 (endret) Okei, denne er kansje litt useless, men jeg tenkte jeg sku prøve å få en Picturebox til å "falle" nedover formen, for så å stoppe på 1000. Vel koden forklarer hva jeg mener. Private Sub Timer1_Timer() Picture1.Top = CLng(1) + CLng(Picture1.Top) If Picture1.Top = 1000 Then Timer1.Enabled = False End Sub Problemet er at den ikke flytter seg Og ja, timern er Enabled. joda, hehe, nå flyttern seg, var visstnok X & Y som var Top og Left i VB Express. Endret 7. november 2006 av Stig Jøran
aadnk Skrevet 7. november 2006 Skrevet 7. november 2006 I dette tilfellet er det ikke noe problem (da du kun øker med én), men ellers burde du kanskje bruke en større-enn- eller mindre-enn-sammenlikningsoperatør, enn kun er-lik, da du kan risikere at bildeboksen får større Top-verdi en maksverdien (som da vil føre til at den aldri stopper bildebokse). Du behøver dessuten ikke bruke en IF-setning: Timer1.Enabled = (Picture1.Top < 1000) Her vil Timerens Enable-egenskap være sann dersom bildeboksens Y-posisjon ikke er mer (og ikke lik) 1000. For øvrig kan det nok gagne å benytte en Do-Loop til slikt istedenfor en Timer, slik som følgende: Option Explicit ' Lar den kjørende tråden (i VB6 blir det i praksis hele spillet) fryses i et visst antall millisekunder. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ' Forteller løkken at spillet skal avsluttes Private bStop As Boolean Private Sub Form_Unload(Cancel As Integer) ' Dersom løkken kjører etter formen blir lukket, forblir spillet kjørende. ' Derfor må vi fortelle løkken at den må avsluttes. bStop = True End Sub Private Sub Form_Load() ' Standardenheten til alle former og objejter i VB6 er twips, som tilsvarer ' 15 piksler (bruk Screen.TwipsPerPixelX og -Y for å finne ut dette lokalt) horisontalt ' og vertikalt. Dette betyr at dersom du flytter bildeboksen 1 enhet i X- eller Y-aksen, ' vil den bare flytte seg 1/15 av en piksel (èn piksel er den laveste lengden skjermen kan ' vises, da den er oppdelt i piksler). Derfor vil jeg anbefale, da det er mer logisk, å ' heller benytte piksler. Dersom du har behov for å lagre posisjonen mer nøyaktig, ' kan du bruke Single eller Double til å holde X- og Y-posisjonen. Me.ScaleMode = vbPixels ' Siden formen ikke er synlig enda, må vi først vise den. Show ' Starter spillløkken. GameLoop 10 ' Du kan godt endre ventetiden. ' *Plasser oppryddingskode her, om nødvendig.* End Sub Private Function MoveObjects() As Boolean ' Flytt bildeboks (CLng() er ikke nødvendig) Picture1.Top = Picture1.Top + 1 ' Se om vi har oversteget/nådd maksimallengden If Picture1.Top >= 500 Then ' I så tilfellet stopper vi løkken. bStop = True ' Forhindrer at vi overhodet kan overstige maksimumet Picture1.Top = 500 End If End Function Public Sub GameLoop(ByVal Wait As Long) ' Forhindrer at løkken avsluttes umiddelbart bStop = False ' Kjør løkke inntil den skal stoppes Do Until bStop ' Flytter objekter MoveObjects ' Forhindrer at vi bruker 100% av CPU-tiden. Sleep Wait ' Lar hendelser (som Form_KeyDown) kjøres. DoEvents Loop End Sub
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å