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ä ?
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.
lainaus:
Sitä en sitten tiedä, miten saa estettyä nuolinäppäimen pohjassa pitämisen.
Käyttämällä KeyUp -eventtiä.
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?
Kiitos paljon !
Miten saan tuohon, että nopeus lisääntyy jos painaa vaikka komentonappulaa nimeltä : cmdVauhtia ?
Kuules. Pistit juuri saman koodin minkä hunajavohvelikin.
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ä.
entäs miten ylös, alas, oikealle ja vasemmalle liikkumen tapahtuu samassa koodissa nuoli näppaimiä painamalla
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
ette nyt ymmärrä. luulen että Matrack tarkoittaa että pitää painaa kokoajan vuorotellen ><><><><>< että se liikkuu!
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.