Miten saan ukon pysähtymään esim picture2 :kakkoseen
(eli kun ukko1 koskee picture1 niin ukko1 ei pääse eteen päin ja sitten kun painaa ylös niin ukko menee ylös ja niin edeleen)
(vb:sä)
Tämä on antin koodin pätkä!
ei minun...
Tässä on toimiva koodi. Laita formille kaksi PictureBoxia, joiden nimet ovat pEste ja pPelaaja. Formin KeyPreview-ominaisuuden täytyy olla True, jotta näppäinohjaus toimii kunnolla, ja formin sekä molempien PictureBoxien ScaleModen täytyy olla 3 eli Pixel.
Dim x As Integer, y As Integer Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Dim ux As Integer, uy As Integer ux = x uy = y Select Case KeyCode Case vbKeyLeft ux = ux - 1 Case vbKeyUp uy = uy - 1 Case vbKeyRight ux = ux + 1 Case vbKeyDown uy = uy + 1 End Select If ux + pPelaaja.Width > pEste.Left And ux < pEste.Left + pEste.Width Then If uy + pPelaaja.Height > pEste.Top And uy < pEste.Top + pEste.Height Then Exit Sub End If End If x = ux y = uy pPelaaja.Move x, y End Sub Private Sub Form_Load() x = 0 y = 0 pPelaaja.Move x, y End Sub
Mitä nuo kummalliset If-lauseet sitten tekevät? Ensimmäinen tarkistaa, onko pPelaaja pEsteen sisällä vaakasuunnassa ja jälkimmäinen tarkistaa, onko pPelaaja pEsteen sisällä pystysuunnassa. Jos kummatkin ehdot ovat tosia, liikkuminen ei ole mahdollista, minkä vuoksi poistutaan aliohjelmasta.
siinä on se vikana että se ei toimi!
Poistin vähän turhia viestejä välistä. Tuo koodinpätkä toimii kyllä (testattu Visual Basic 6.0:lla), jos seuraat alussa olevia ohjeita. Ja jos ei kuitenkaan toimi, sinun täytyy kuvata ongelmasi tarkasti eikä pelkästään sanoa "ei toimi".
Mutta sitä tuskin on testattu Visual Basic 3:mosessa
(on minulla kutonenkin mutta sillä ei pysty tekemään exe:ä niin siitä ei ole hyöty joten tarvitsen koodin pätkän joka toimii Visual Basic 3:mosessa)
Kolmosversiossa toimii muuten suoraan, mutta näppäinvakioiden tilalla täytyy käyttää näppäinkoodeja. Eli muuta Select-rakennetta näin:
Select Case KeyCode Case 37 'vasemmalle ux = ux - 1 Case 38 'ylös uy = uy - 1 Case 39 'oikealle ux = ux + 1 Case 40 'alas uy = uy + 1 End Select
Toinen vaihtoehto on määrittää vakiot itse ohjelman alussa:
Const vbKeyLeft = 37 Const vbKeyUp = 38 Const vbKeyRight = 39 Const vbKeyDown = 40
Aihe on jo aika vanha, joten et voi enää vastata siihen.