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 Next
Lopuksi 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 Function
Jos 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.