Millä koodilla saan tehtyä peliin seinät, joista ukkeli ei pääse läpi...?
jos ukkeli menee vauhdilla 1 päin seinää, vauhti on 0
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??
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.
vähän liian vaikeeta mun aivoille...miten siis tallennetaan koordinaatit ?varamuuttujiin? :?
No näin:
vx = x vy = y 'Liikutetaan ukkoa If ukko_on_seinän_sisällä Then x = vx: y = vy
voisko sen tehdä jotenkin sillee että kun ukko on oikeenpuolimmaisen seinän reunalla, niin disabloidaan keycoderight tai jotenkin silleen???
Miksi noin monimutkaisella tavalla tehtäisiin, kun helpommallakin selviää? :-)
kirjotanko noi jutut formiin??
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ä!
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
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
taas yks tyhmä kysymys, mutta käykö toi hunajavohvelin koodi tollasenaan vai pitääkö mun laittaa noihin ne ukon ja seinän koordinaatit..??? :(
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ä.
tein tällasen koodin ylä seinään niin nyt toimii...:)
If ukkeli.Top = 25 Then ukkeli.Top = 30
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
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.
siis tarkotat esim.
if ukkeli.top=300 AND ukkeli.left=200 then ukkeli.top...jne?
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ä.
joo kiitti no täytyy katella miten onnistuu...
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...?
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.