Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Este kentällä

Sivun loppuun

Zero88 [28.06.2004 20:52:47]

#

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...

kenkku [28.06.2004 21:00:53]

#

Ä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ä.

hunajavohveli [28.06.2004 21:16:08]

#

Tätä lienee kysytty jo reilusti yli kymmenen kertaa. Eikö tämä homma selviä oppaista, tai hausta katsomalla?

pipopää [29.06.2004 17:59:20]

#

Ei, se ei selviä selvästi oppaista

Antti [29.06.2004 18:15:53]

#

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).

Zero88 [03.07.2004 12:59:22]

#

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...

Metabolix [03.07.2004 13:15:42]

#

Tee tarkistus jo aiemmin!
Katsot onko edessä este, jos on, et liiku.

JoreSoft [07.07.2004 20:55:44]

#

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/24420-vb6-monta-spriteä


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta