Character wrote:Miten saan tehtyä kuville liukuvan törmäyksen?
Tässä tulee väsyneenä värkätty koodi, toivottavasti auttaa. Kyseessä siis laatikkotörmäystunnistus. Jos haluaa pikselitarkan törmäyksen käytä "Imagesoverlapin()" sijalla funktiota "ImagesCollide()".
Code: Select all
FrameLimit 40
ClsColor cbwhite
'Luodaan kuvat
'Voit korvata loadimagella
'esim l1=loadimage("lehmä.jpg") tms
'mutta teen nyt cb:n valmiilla piirtokomennoilla
l1=MakeImage(50,50)
l2= MakeImage(50,50)
DrawToImage l1
Color cbblue
Box 0,0,50,50,1
DrawToImage l2
Color cbred
Box 0,0,50,50,1
DrawToScreen
'-----------
'muuttujat :
l1x = 10'kuvan l1 koordinaatit
l1y = 10
l2x = 100'ja sama kuvalle 2
l2y = 100
Repeat 'Looppi
'Laitetaan laatikon vanhat koordinaatit muistiin törmäystä varten:
l1xvanha=l1x
l1yvanha=l1y
'ohjaa nuolilla
If LeftKey() Then l1x-3
If RightKey() Then l1x+3
If UpKey() Then l1y-3
If DownKey() Then l1y+3
'Törmäys, ohjauksen jälkeen pitää olla:
If ImagesOverlap(l1,l1x,l1y,l2,l2x,l2y) Then
l1x=l1xvanha'jos törmää boxiin, niin laitetaan
l1y=l1yvanha'vanhat koodinaatit
//////LIUKUTÖRMÄYS:////////////////////////////////////////////////
'tulikohan purkalla?
'ei voi edes toteuttaa else/if-rakenteella, koska silloin ei toimi
If UpKey() Then
l1y-3
If ImagesOverlap(l1,l1x,l1y,l2,l2x,l2y) Then l1y=l1yvanha
EndIf
If DownKey() Then
l1y+3
If ImagesOverlap(l1,l1x,l1y,l2,l2x,l2y) Then l1y=l1yvanha
EndIf
If RightKey() Then
l1x+3
If ImagesOverlap(l1,l1x,l1y,l2,l2x,l2y) Then l1x=l1xvanha
EndIf
If LeftKey() Then
l1x-3
If ImagesOverlap(l1,l1x,l1y,l2,l2x,l2y) Then l1x=l1xvanha
EndIf
'///////////////////////////////////////////////////////////
EndIf
//Piirretään kuvat:
DrawImage l1,l1x,l1y
DrawImage l2,l2x,l2y
DrawScreen
Forever
Edit: no laitanpa vielä laiskoille koodin imagescollidella. Törmäystunnistus on siis nyt pikselin tarkka ja sitä voi siis hyvin käyttää vaikka karttakuvissa yms. Hidashan se on...
Code: Select all
FrameLimit 40
ClsColor cbwhite
'Luodaan kuvat
'Voit korvata loadimagella
'esim l1=loadimage("lehmä.jpg") tms
'mutta teen nyt cb:n valmiilla piirtokomennoilla
l1=MakeImage(50,50)
l2= MakeImage(50,50)
DrawToImage l1
Color cbblue
Box 0,0,50,50,1
DrawToImage l2
Color cbred
Box 0,0,50,50,1
DrawToScreen
'-----------
'muuttujat :
l1x = 10'kuvan l1 koordinaatit
l1y = 10
l2x = 100'ja sama kuvalle 2
l2y = 100
Repeat 'Looppi
'Laitetaan laatikon vanhat koordinaatit muistiin törmäystä varten:
l1xvanha=l1x
l1yvanha=l1y
'ohjaa nuolilla
If LeftKey() Then l1x-3
If RightKey() Then l1x+3
If UpKey() Then l1y-3
If DownKey() Then l1y+3
'Törmäys, ohjauksen jälkeen pitää olla:
If ImagesCollide(l1,l1x,l1y,0,l2,l2x,l2y,0) Then 'Tänne Imagescollide- jos haluaa pikselitörmäyksen
l1x=l1xvanha'jos törmää boxiin, niin laitetaan
l1y=l1yvanha'vanhat koodinaatit
//////LIUKUTÖRMÄYS:////////////////////////////////////////////////
'tulikohan purkalla?
'ei voi edes toteuttaa else/if-rakenteella, koska silloin ei toimi
If UpKey() Then
l1y-3
If ImagesCollide(l1,l1x,l1y,0,l2,l2x,l2y,0) Then l1y=l1yvanha 'Tänne Imagescollide- jos haluaa pikselitörmäyksen
EndIf
If DownKey() Then
l1y+3
If ImagesCollide(l1,l1x,l1y,0,l2,l2x,l2y,0) Then l1y=l1yvanha 'Tänne Imagescollide- jos haluaa pikselitörmäyksen
EndIf
If RightKey() Then
l1x+3
If Imagescollide(l1,l1x,l1y,0,l2,l2x,l2y,0) Then l1x=l1xvanha 'Tänne Imagescollide- jos haluaa pikselitörmäyksen
EndIf
If LeftKey() Then
l1x-3
If ImagesCollide(l1,l1x,l1y,0,l2,l2x,l2y,0) Then l1x=l1xvanha 'Tänne Imagescollide- jos haluaa pikselitörmäyksen
EndIf
'///////////////////////////////////////////////////////////
EndIf
//Piirretään kuvat:
DrawImage l1,l1x,l1y
DrawImage l2,l2x,l2y
DrawScreen
Forever