Gå til innhold

Trenger hjelp med enkel kode.


Anbefalte innlegg

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 :p

Og ja, timern er Enabled.

 

joda, hehe, nå flyttern seg, var visstnok X & Y som var Top og Left i VB Express.

Endret av Stig Jøran
Lenke til kommentar
Videoannonse
Annonse

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

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å
×
×
  • Opprett ny...