Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: läpäisemättömät seinät

Sivun loppuun

Zero88 [19.04.2004 20:43:47]

#

Millä koodilla saan tehtyä peliin seinät, joista ukkeli ei pääse läpi...?

zigilii [19.04.2004 20:46:18]

#

jos ukkeli menee vauhdilla 1 päin seinää, vauhti on 0

Zero88 [19.04.2004 20:49:23]

#

Käytän tällaista koodia ukon liikuttamiseen...

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = vbKeyRight Then
ukkeli.Left = ukkeli.Left + 5
End If
If KeyCode = vbKeyLeft Then
ukkeli.Left = ukkeli.Left - 5
End If
If KeyCode = vbKeyUp Then
ukkeli.Top = ukkeli.Top - 5
End If
If KeyCode = vbKeyDown Then
ukkeli.Top = ukkeli.Top + 5
End If

End Sub

en tiedä miten teen sen..

ps. onko mitään melko yksinkertaista tapaa??

hunajavohveli [19.04.2004 20:49:37]

#

Eli ensin tallennat ukon kordinaatit varamuuttujiin. Sitten liikutat ukkoa. Sitten tarkistat If-lausekkeilla onko ukko seinän sisällä, ja jos on niin sitten palautat ukon kordinaatit aikaisemmin tallennettuihin varakordinaatteihin.

Zero88 [19.04.2004 20:52:36]

#

vähän liian vaikeeta mun aivoille...miten siis tallennetaan koordinaatit ?varamuuttujiin? :?

hunajavohveli [19.04.2004 20:54:20]

#

No näin:

vx = x
vy = y

'Liikutetaan ukkoa

If ukko_on_seinän_sisällä Then x = vx: y = vy

Zero88 [19.04.2004 20:55:29]

#

voisko sen tehdä jotenkin sillee että kun ukko on oikeenpuolimmaisen seinän reunalla, niin disabloidaan keycoderight tai jotenkin silleen???

hunajavohveli [19.04.2004 20:57:45]

#

Miksi noin monimutkaisella tavalla tehtäisiin, kun helpommallakin selviää? :-)

Zero88 [19.04.2004 21:04:41]

#

kirjotanko noi jutut formiin??

sooda [19.04.2004 21:05:18]

#

No tiätty niin että kun painat nappia niin tarkistat että jos sen nykyinen positio + siirtomäärä ei ole yhtä kuin ukkoonseinässä niin sitten siirretään eli tyyliin oikeelle:
if ukkox+ukkowidth+siirtomäärä<seinäx then ukkox=ukkox+siirtomäärä. Iisii kui mikä!

zigilii [19.04.2004 21:06:35]

#

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If ukkeli.Left < 400 Then
    If KeyCode = vbKeyRight Then
        ukkeli.Left = ukkeli.Left + 5
    End If
End If

If ukkeli.Left > 10 Then
    If KeyCode = vbKeyLeft Then
        ukkeli.Left = ukkeli.Left - 5
    End If
End If

If ukkeli.Top > 10 Then
    If KeyCode = vbKeyUp Then
        ukkeli.Top = ukkeli.Top - 5
    End If
End If

If ukkeli.Top < 400 Then
    If KeyCode = vbKeyDown Then
        ukkeli.Top = ukkeli.Top + 5
    End If
End If

End Sub

jos haluut tehä niin vaikeesti

hunajavohveli [19.04.2004 21:07:19]

#

sooda kirjoitti:

No tiätty niin että kun painat nappia niin tarkistat että jos sen nykyinen positio + siirtomäärä ei ole yhtä kuin ukkoonseinässä niin sitten siirretään eli tyyliin oikeelle:
if ukkox+ukkowidth+siirtomäärä<seinäx then ukkox=ukkox+siirtomäärä. Iisii kui mikä!

Varsinkin kun sen selostaa noin hienosti aloittelijalle sopivalla tyylillä. :D

Zero88 [19.04.2004 21:14:16]

#

taas yks tyhmä kysymys, mutta käykö toi hunajavohvelin koodi tollasenaan vai pitääkö mun laittaa noihin ne ukon ja seinän koordinaatit..??? :(

hunajavohveli [19.04.2004 21:19:23]

#

ukko_on_seinän_sisällä

Tietenkään tuo pätkä ei käy tuollaisenaan. Eihän VB tuosta ymmärtäisi yhtään mitään. Tarkoitin vain, että tuohon kohtaan pistät sen tarkituksen, ja jos se on positiivinen, eli ukko on seinän sisässä, sitten ladataan edelliset kordinaatit ja ukko palautuu takaisin edelliseen paikkaan, eli siis ikään kuin kimpoaa seinästä.

Zero88 [19.04.2004 21:33:15]

#

tein tällasen koodin ylä seinään niin nyt toimii...:)

If ukkeli.Top = 25 Then ukkeli.Top = 30

Zero88 [19.04.2004 21:43:44]

#

Tein tän koodin kaikkiin ulkoseiniin joten nyt toimii..

If ukkeli.Top = 25 Then ukkeli.Top = 30
If ukkeli.Left = 25 Then ukkeli.Left = 30
If ukkeli.Top = 425 Then ukkeli.Top = 420
If ukkeli.Left = 365 Then ukkeli.Left = 360

hunajavohveli [20.04.2004 14:08:47]

#

Hyvä! Päättelit aivan oikein, miten homma toimii. :-)
Jos haluat luoda kentälle kappaleita, joiden läpi ei saa myöskään kulkea, joudut käyttämään luultavasti AND-operaattoreita.

Zero88 [20.04.2004 15:54:05]

#

siis tarkotat esim.
if ukkeli.top=300 AND ukkeli.left=200 then ukkeli.top...jne?

hunajavohveli [20.04.2004 16:01:16]

#

Niin tai jos kappaleen vasen reuna on Seina.Left, oikea reuna Seina.Left + Seina.Width, yläreuna Seina.Top ja alareuna Seina.Top + Seina.Height niin tarkistat, että jos ukko on vasemman reunan oikealla puolella ja ukko on lisäksi oikean reunan vasemmalla puolella niins silloinhan ukko on jo x-akselilla katsottuna samalla kohtaa seinän kanssa. Sitten testaat lisäksi, että jos ukko on yläreunan alapuolella ja lisäksi alareunan yläpuolella, niin silloin se on kokonaan seinän sisällä.

Zero88 [20.04.2004 16:05:29]

#

joo kiitti no täytyy katella miten onnistuu...

Zero88 [20.04.2004 20:30:11]

#

en tainnu sittenkään tajuta tota juttuu, joten jos sul on aikaa hunajavohveli, niin voisitko lähettää koodin joka toimii sellasenaan niin ehkä tajuisin siitä jotain...?

hunajavohveli [20.04.2004 21:31:30]

#

Olit kyllä tuossa toisessa aiheessasi, missä kysyt, onko törmäyksessä puutteita, tajunnut ihan oikein, kun olit tehnyt sen päällekäisten If-lauseiden ketjun. Tarkoitin, että sen olisi voinut yhdistää yhdeksi AND-operaattoreilla, mutta toimiihan se homma noinkin.


Sivun alkuun

Vastaus

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

Tietoa sivustosta