Voisiko joku kertoa että millä koodilla saan tehtyä sellaisen että ukkeli ei pääse kentällä olevan esteen läpi esim.kiven... Kivi olisi kohdassa kivi.left=50 kivi.top=75
ja kivi on 25 pikseliä leveä ja 25 pikseliä korkea. Olen yrittänyt jo ratkaista ongelmaa monella tavalla mutta en ole onnistunut.
Hain jo hausta mutta en ymmärtänyt...
Älä tee sitä pictureboxeilla. Tulee purkkaa ja hammasten kiristelyä..
Pieni esimerkki miten homman voisi hoitaa:
Taulukossa on kentän tiedot, tsekkaillaan onko siinä kohassa minne mennään jotain estettä vaikos ei.
Kaiken jälkeen piirretään kenttä vaikkapa BitBlt:llä.
Tätä lienee kysytty jo reilusti yli kymmenen kertaa. Eikö tämä homma selviä oppaista, tai hausta katsomalla?
Ei, se ei selviä selvästi oppaista
Rakenna Strukti kaikista esineistä joiden läpi ukko ei saa kulkea:
Type Este Top as Long Left as Long Width as Long Height as Long End Type Public Esteet() as Este
Jokaiseen kenttään määrittelet esteiden määrän, joka luetaan esim tiedostosta ja alustat kenttää ladatessa Esteet-Joukon.
Dim Esteidenmaara as Long Redim Esteet(Esteidenmaara) as Este
Sen jälkeen populoit luodun joukon esim tiedostosta haetuilla arvoilla:
Dim a as Integer, x as Long, y as Long, h as Long, w as Long
For a=0 to Ubound(Esteet)
' Tässä kohtaa lue uudet arvot tiedostosta muuttujiin
' ....
    Esteet(a).Top=x
    Esteet(a).Left=y
    Esteet(a).Height=h
    Esteet(a).Width=w
NextLopuksi ukkoa liikkuessa tutkit loopilla kyseisen Struktin läpi ja vertaat arvoja estettyihin alueisiin. (En nyt jaksa ihan valmiiksi saakka koodata).
Osaan kyllä muuten tehdä sen jutun mutta ongelma on se että ukko välkkyy kun se törmää esteeseen, koska teen tarkistuksen vasta sitten kun ukko on jo törmännyt...
Tee tarkistus jo aiemmin!
Katsot onko edessä este, jos on, et liiku.
Sub LiikutaUkkoa()
Dim X%, Y%
    X = ukko.Left
    Y = ukko.Top
    X = X + suuntaX
    If Not OnkoTörmäys(X, Y, Este.Left, Este.Top, ukko.ScaleWidth, ukko.ScaleHeight) Then
        ukko.Left = X
    Else
        suuntaX = -suuntaX
    End If
    Y = Y + suuntaY
    If Not OnkoTörmäys(X, Y, Este.Left, Este.Top, ukko.ScaleWidth, ukko.ScaleHeight) Then
        ukko.Top = Y
    Else
        suuntaY = -suuntaY
    End If
    PiirräUkko
End Sub
Function OnkoTörmäys(X1%, Y1%, X2%, Y2%, SX%, SY%) As Boolean
    If X1 + SX > X2 Then
        If X1 < X2 + SX Then
            If Y1 + SY > Y2 Then
                If Y1 < Y2 + SY Then
                    OnkoTörmäys = True
                End If
            End If
        End If
        End If
End FunctionJos tulos on True, muuttaa suuntaa vastakkaiseksi.
muutoin jatketaan normaalisti
Katso myös
https://www.ohjelmointiputka.net/koodivinkit/
Aihe on jo aika vanha, joten et voi enää vastata siihen.