Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Peliohjelmoinnista

matpit [19.01.2007 21:41:05]

#

Elikkäs lyhyestä virsi kaunis, meinasin kokeilumielessä tehdä pienen ns. 'demon', joka olisi sivultapäin kuvattu, 'platform' tyylinen, missä olisi liikuteltava hahmo, ja siihen voisi ladata erillisistä tiedostoista kentän. Kenttä muodostuisi 'polygoneista', eli se ei olisi tile-pohjainen. Kysymys siis kuuluu näin:

Mikä olisi tällaisessa paras tapa toteuttaa törmäystarkistus maan kanssa? Pitäisikö lukea kenttä taulukkoon, ja käydä aina taulukko läpi?

Valmista koodia en tietenkään kaipaa. 8)

Metabolix [19.01.2007 22:52:58]

#

Niinhän se periaatteessa menee. Tietenkin sitten tähän on tuhat ja sata optimointikeinoa kuten se, että jaetaan maailma sopiviin alueisiin ja käydään läpi vain sen alueen (tai niiden parin alueen) listat, jolla (joiden rajalla) hahmo on.

Gwaur [20.01.2007 14:14:47]

#

Eikö olisi myös mahdollista ajatella polygonien reunat analyyttisgeometrisina suorina ja tarkistaa epäyhtälöllä, onko hahmo reunan ala- vai yläpuolella?

os [20.01.2007 16:21:12]

#

Törmäystarkastuksen monikulmion kanssa voi tarkistaa ns. even-odd-säännöllä:

Piste (hahmo, tai sen reunapiste) on suljetun monikulmion (polygon) sisällä, jos ja vain jos sen kautta piirretty mielivaltainen puolisuora (esim. positiivinen x-akseli) leikkaa parittoman määrän monikulmion sivujanoja.

Kokeilet siis jokaisen sivujanan kohdalla (siirry seuraavaan kohtaan vain jos vastaus on ei):
1. Ovatko janan molemmat päätepisteet joko hahmon alapuolella tai sen yläpuolella (ei leikkausta)
2. Ovatko janan molemmat päätepisteet hahmon takapuolella (ei leikkausta)
3. Ovatko janan molemmat päätepisteet hahmon etupuolella (leikkaus)
4. Leikkaako janan päätepisteiden kautta piirretty suora hahmon kautta piirretyn vaakasuoran viivan hahmon etupuolella (leikkaus)
5. Ei leikkausta

Jos janan päätepiste on pystysuunnassa täsmälleen samalla tasalla hahmon kanssa (puolisuora leikkaa monikulmion sen kulmassa) täytyy selvittää onko toinen samasta pisteestä alkava sivujana pystytasossa samalla puolella hahmoa (ei leikkausta / 2 leikkausta) vai ei (leikkaus).

Jos leikkauksia kertyy 1, 3, 5, 7 ..., niin piste on monikulmion sisällä. Säännön toimivuutta voi kokeilla vaikka kynällä ja paperilla: piirrä mielivaltainen suljettu kuvio ja sen sisään tai ulkopuolelle piste ja pisteestä (päättymätön) säde mihin tahansa suuntaan ja laske leikkaukset kuvion reunojen kanssa (yllä mainittu poikkeussääntö huomioiden).

matpit [20.01.2007 20:55:00]

#

Kiitos vastauksista, osin vaustaus meni jo hiukan yli hilseen, mutta eiköhän tämä tästä. ;]

Lisää ehdotuksia saa toki laittaa.

Vastaus

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

Tietoa sivustosta