Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Objektin liikutus

Sivun loppuun

Matrack [22.02.2004 11:53:00]

#

Erässä pelissä (Mikä Myllylä) oli tehty ukon liikkuminen näin :
Pelaajan piti "rämpyttää" nuolinäppäimistä vasenta ja oikeaa nuolta, jolloin ukko liikkui eteenpäin. Nuolinäppäimien rämpytys nopeus vaikutti ukon liikkumisnopeuteen.

Miten tuollaisen voisi tehdä VB:llä ?

hunajavohveli [22.02.2004 12:56:40]

#

Teet ohjelman, joka valvoo nuolinäppäimen painallusta. Kun näppäintä painetaan, kasvatetaan nopeus-muuttujaa. Muuttujaa pitää kuitenkin samalla koko ajan vähentää, niin että ukko pysähtyy, jos painaminen loppuu. Sitä en sitten tiedä, miten saa estettyä nuolinäppäimen pohjassa pitämisen.

Tuossa on pieni koodinpätkä. Lisää vain Timer ja Shape. Ja muista laittaa Timerin intervalliksi 10.

Dim speed
Dim flag

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = 39 And flag = 0 Then speed = speed + 1: flag = 1
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)

flag = 0
End Sub

Private Sub Timer1_Timer()

Shape1.Left = Shape1.Left + speed * 15

speed = speed / 1.03

End Sub

Edit: Lisäsin tuohon koodiin sen lippujutun, josta Blaze muistutti.

Blaze [22.02.2004 13:00:47]

#

lainaus:

Sitä en sitten tiedä, miten saa estettyä nuolinäppäimen pohjassa pitämisen.

Käyttämällä KeyUp -eventtiä.

hunajavohveli [22.02.2004 13:04:12]

#

lainaus:

Käyttämällä KeyUp -eventtiä.

Niinpä tietysti! Eli kun näppäin painetaan, "Lippu" saa totuusarvon, eikä nopeus lisäänny, niin kauan kun Lippu on tosi. Kun näppäin nostetaan, Lippu nollaantuu.
Eikö tuollaisissa tapauksissa käytettäviä muuttujia kutsuta lipuiksi?

Matrack [22.02.2004 15:07:25]

#

Kiitos paljon !

Miten saan tuohon, että nopeus lisääntyy jos painaa vaikka komentonappulaa nimeltä : cmdVauhtia ?

remontti-reiska [22.02.2004 15:15:54]

#

Kuules. Pistit juuri saman koodin minkä hunajavohvelikin.

hunajavohveli [22.02.2004 17:09:34]

#

Eihän pistänyt. Alkuperäisen koodin kirjoitin kyllä minä, mutta huomaa, että makeuu teki siihen yhden muutoksen.

Private Sub Form_KeyDown
vaihtui:
Private Sub Form_cmdVauhtia

Mutta nyt tuo Flag-systeemi ei enää toimikaan. Nappulaa voi nimittäin painaa vain pitämällä Enteriä pohjassa, eikä hiirtä tarvitse käyttää. Näin ollen ei saa valvottua, milloin hiiri painaa ja nostaa nappulan. Tämän enter-bannin sai kyllä muistaakseni jostain ominaisuudesta säädettyä.

zigilii [22.02.2004 17:16:13]

#

entäs miten ylös, alas, oikealle ja vasemmalle liikkumen tapahtuu samassa koodissa nuoli näppaimiä painamalla

hunajavohveli [22.02.2004 17:22:41]

#

No sitten pitää tehdä kaksi nopeusmuuttujaa, ynnä muiden nuolinäppäinten koodit:

Dim speedx
Dim speedy
Dim flag

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = 39 And flag = 0 Then speedx = speedx + 1: flag = 1
If KeyCode = 37 And flag = 0 Then speedx = speedx - 1: flag = 1
If KeyCode = 40 And flag = 0 Then speedy = speedy + 1: flag = 1
If KeyCode = 38 And flag = 0 Then speedy = speedy - 1: flag = 1
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)

flag = 0
End Sub

Private Sub Timer1_Timer()

Shape1.Left = Shape1.Left + speedx * 15
Shape1.Top = Shape1.Top + speedy * 15

speed = speed / 1.03

End Sub

miiro [23.02.2004 18:04:17]

#

ette nyt ymmärrä. luulen että Matrack tarkoittaa että pitää painaa kokoajan vuorotellen ><><><><>< että se liikkuu!

hunajavohveli [23.02.2004 19:48:20]

#

Nyt on ainekset annettu valmiiksi pohjaksi. Tästä eteenpäin on syytä miettiä itse. Jos kaiken kysyy toisilta, ei itselle kehity ollenkaan loogista ajattelua, jota ohjelmoinnissa vaaditaan.

Edit: Yritäpä noilla Lippu-muuttujilla kikkailla oma systeemi niin, että saat toimimaan näppäinvuorottelu-liikkumisen.


Sivun alkuun

Vastaus

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

Tietoa sivustosta