Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Miten kuvan saa liikkumaan itsestään edestakaisin

Sivun loppuun

Zero88 [18.04.2004 12:44:31]

#

Joo on ongelma. miten saan timer2 päälle kun picture liikkuu tiettyyn kohtaan...?
eli timer1 määrää että kuva liikkuu oikealle

Private Sub Timer1_Timer()

Picture1.Left = Picture1.Left + 100

End Sub

miten saan tehtyä sellasen että kun se on mennyt tietyn matkaa eteenpäin, niin se lähtee takaisin päin eli miten saan timer2 päälle???

En oikeen osaa selittää asiaa...Toivottavasti joku tajuu mitä tarkoitan.

Antti Laaksonen [18.04.2004 12:54:19]

#

Homma hoituu yhdelläkin Timerillä. Liikkumissuunta täytyy vain oikeassa kohdassa muuttaa päinvastaiseksi.

'tämä muuttuja on käytössä kaikissa aliohjelmissa
Dim suunta As Integer

Private Sub Form_Load()
    Timer1.Interval = 50   'liikkumisaikaväli
    ScaleMode = 3          'mittayksikkö pikseli
    Picture1.Left = 0      'kuvan aloituskohta
    suunta = 1             'kuvan aloitussuunta
End Sub

Private Sub Timer1_Timer()
    'liikutetaan kuvaa sivusuunnassa oikeaan suuntaan 5 pikseliä
    Picture1.Left = Picture1.Left + suunta * 5
    'kohdassa 100 käännetään suunta päinvastaiseksi
    If Picture1.Left >= 100 Then suunta = -1
    'kun kuva on palannut aloituspaikkaan, lopetetaan liikkuminen
    If Picture1.Left <= 0 Then suunta = 0
End Sub

PS. Kannattaa käyttää mittayksikkönä pikseliä twipin sijaan.

Zero88 [18.04.2004 13:00:34]

#

Kiittos... noinhan se onnistuu.

entä jos haluun että kuva liikkuu neliön muotoisesti, tarviinko enempää timereitä?

ps.miten se twip vaihdetaan pixeliin?(vai tarviiko vaihtaa?)

Meitzi [18.04.2004 13:06:47]

#

Zero88 kirjoitti:

entä jos haluun että kuva liikkuu neliön muotoisesti, tarviinko enempää timereitä?

Kokeileppa miettiä ihan itse, Antin koodissa on hyvä lähtökohta.

miiro [18.04.2004 14:06:15]

#

Mutta tuossa alussa selittämälläsi koodilla, jos haluat välttämättä kahdella timerilla, tekisin näin:

Private Sub Timer1_Timer()

Picture1.Left = Picture1.Left + 100

Timer2.Enabled = True
Timer1.Enabled = False
End Sub

Private Sub Timer2_Timer()

Picture1.Left = Picture1.Left - 100

Timer1.Enabled = True
Timer2.Enabled = False
End Sub

Blaze [18.04.2004 14:13:47]

#

Zero88 kirjoitti:

ps.miten se twip vaihdetaan pixeliin?

Formin ScaleMode kolmoseksi.

peki [18.04.2004 18:01:09]

#

Tämän saisi tehtyä kauniimminkin.
eli:

dim Phi as double
Private Sub Timer1_Timer()
Phi += 0.1
if Phi > 2*3.1419 then Phi = 0
picture1.left = picture1.left + Sin(Phi) * 200 ' Liikkuu 400 pikseliä oikealle, jonka jälkeen 400 pikseliä vasemmalle jne.
End Sub

Zero88 [18.04.2004 20:51:57]

#

miiro oon kokeillu tolla koodilla, mutta ne kuvat vaan välkkyy eri paikoissa??mistäköhän on kysymys??

Antti Laaksonen [18.04.2004 21:43:46]

#

Zero88 kirjoitti:

mistäköhän on kysymys??

Siitä, että vuorotellen toinen Timer siirtää kuvaa eteenpäin ja toinen taaksepäin. Jos haluat välttämättä käyttää kahta Timeriä, niin laita toinen Timer toimintaan vasta silloin, kun liikkuva kuva on saavuttanut päätepisteensä.

Zero88 [19.04.2004 17:48:51]

#

Sitä mä oonkin kovasti yrittäny selvittää, että miten se tehdään, mutta ei oo onnistunut...
Oon yrittäny kaikenlaista koodia kuten esim.

If picture1.left=500 then timer2.enabled=true
If picture1.left=500 then timer1.enabled=false

tai

If picture1.left=500 then timer2.enabled=true and timer1.enabled=false

Voisko joku kertoo että millä koodilla saan sen toimimaan, kun ei oikeen oma äly riitä...:(

Meitzi [19.04.2004 18:38:36]

#

Kokeileppa:

If picture1.left >= 500 Then
  timer2.enabled = True
  timer1.enabled = False
End If

tuomas [19.04.2004 18:48:35]

#

Luulis että oisit saanut jo toimimaan jo noilla mutta tässä tulee nyt vielä yksi..
Laita timereiden intervalit vaikka 100:taan


Private Sub Timer1_Timer()

If Picture1.Left <= 700 Then
'Liikutetaan kuvaa
Picture1.Left = Picture1.Left + 100
End IF

If Picture1.Left >= 701 Then
Timer2.Enabled = True
Timer1.Enabled = False
End IF

End Sub

Private Sub Timer2_Timer()

If Picture1.Left >= 700 Then
'Liikutetaan kuvaa
Picture1.Left = Picture1.Left - 100
End IF

If Picture1.Left <= 100 Then
Timer2.Enabled = False
Timer1.Enabled = True
End IF

End Sub

En oo testannu tota mutta luulisin että se toimii.
Jos ei toimi vaiha noita pienempi / suurempi juttuja toisin päin.

Zero88 [19.04.2004 18:53:06]

#

Kiitti meitzi nyt toimii hyvin :)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta