Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Törmäystunnistuksen perusteet

Sivun loppuun

kayttaja-3842 [28.11.2013 16:55:32]

#

Terve kaikki,

Eli olen väsäämässä 2D peliin perus Box Collision tunnistusta.

Perusperiaatteiltaan ko. tunnistus on yksinkertainen, mutta törmäsin erääseen ongelmaan.

Eli tarkistan if -lauseillani onko ko. objektin sivut Left, Right, Top ja Bottom törmänneet toisen objektin sivujen kanssa. Ongelmia ilmenee kuitenkin siinä, että kun esim. objektin Top -sivu törmää toisen objektin Bottomin kanssa törmää myös Left ja Right sivut.

Tässä hyvin havainnollistava kuva. :)

http://oi42.tinypic.com/11v4emb.jpg

- Kiitos

The Alchemist [28.11.2013 17:37:16]

#

No kerrohan nyt vähän niistä ongelmistasi.

kayttaja-3842 [28.11.2013 18:05:36]

#

Eli ongelmahan on toi että periaateessahan tuossa tuo vihreä objekti voisi liikkua vasemmalle sekä oikealle, mutta koska koordinaatit mätsäävät myös left ja rightin kanssa niin tuloksena on, että käyttäjä voi liikuttaa objektia vain alas.

Quirzo [28.11.2013 18:14:55]

#

Onnistuisiko niin että tarkistaa onko objektin left sama kuin toisen objektin right, right sama kuin left, top sama kuin bottom ja bottom sama kuin top?

Eli kun liikuteltavan top = paikallaan olevan bottom, se on törmännyt. Mutta kuitenkin right ei täsmää leftiin eikä toisinpäin?

Tajusinkohan edes itsekään..

kayttaja-3842 [28.11.2013 18:22:35]

#

En aivan ymmärtänyt? :)

Edit1:
Eli tarkennuksena vielä, että tarkoitan left ja right törmäyksellä laatikon left ja right sivuja.

Quirzo [28.11.2013 18:31:41]

#

Kun yritetään liikkua, tarkistetaan:

-Onko liikuteltavan Top sama kuin paikallaan olevan Bottom
-> Jos on, ei saa liikkua ylöspäin

-Onko liikuteltavan Bottom sama kuin paikallaan olevan Top
->Jos on, ei saa liikkua alaspäin

-Onko liikuteltavan Left sama kuin paikallaan olevan Right
->Jos on, ei saa liikkua vasemmalle

-Onko liikuteltavan Right sama kuin paikallaan olevan Left
->Jos on, ei saa liikkua oikealle

Koska aina jos törmätään esimerkiksi liikkumattoman laatikon oikeaan reunaan, on törmääjänä pakko olla vasen reuna. Ei siis tarkasteta että osuuko vaikka alareuna oikeaan reunaan.

kayttaja-3842 [28.11.2013 18:46:01]

#

Hmm, siis koordinaatti tasolla mietittynä ei ohjelma sinänsä tiedä mikä on bottom top jne jne. Vaan miten ne mätsäävät väleillä.

Tässä tarkistus metodini. Törmäys ilmaistaan tavun biteillä 0 - 3.

Bitti
0 - Left
1 - Top
2 - Bottom
3 - Right

...

Othnos [28.11.2013 21:18:17]

#

Yksi tapa on, että liikutaan pois törmäysalueelta ennen piirtoa. Eli jos saat tiedon törmäyksestä esimerkiksi ylöspäin niin liikutat koordinaatti kerrallaan objectia alaspäin niin pitkään ettei kyseinen törmäys ole enää voimassa. Vasta sen jälkeen piirrät muuttuneen tilanteen.

kayttaja-3842 [28.11.2013 21:36:38]

#

Hmm, mielestäni kokeilin tuota aikasemmin ja jäin siihen käsitykseen ettei toiminut. Mutta tosiaan kokeilin nytten ehdotuksestasi johtuen uudelleen ja näyttäisi tuolla siirolla sitten kuitenkin toimivan? :)

Eli näillä näppäimillä näyttäisi ongelma ratkenneen.

Suuret kiitokset kaikille vastanneille.

setä [28.11.2013 22:57:34]

#

Eikös törmäys ole mahdollista vain yhdestä suunnasta kerrallaan. Jos ollaan kiinni Bottonissa ei muita suuntia tarvitse edes tarkistaa.

kayttaja-3842 [28.11.2013 23:18:46]

#

Periaatteessa yks sivu per objekti kyllä, mutta mistä tiedät, että juuri Bottom on se ns. "oikea" törmäys?

Grez [29.11.2013 01:38:25]

#

No esim. siitä että left ja right ei oo reunassa vaan "sisällä"

Metabolix [29.11.2013 14:59:43]

#

Ei sitä edes tarvitse tietää, jos siirryt aina vain takaisin tulosuuntaan.

kayttaja-3842 [30.11.2013 13:46:47]

#

Tänää pääsin todelliseen läpi murtoon törmäyksentunnistukseni kanssa. :)

Ratkaisuksi koitui loppujen lopuksi penetration depth -arvojen huomioon ottaminen.


Sivun alkuun

Vastaus

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

Tietoa sivustosta