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 SubMitä 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 SelectToinen 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.