Kaipaisin jonkinlaisia vinkkejä tuon LOS:n (line of sightin) parantamiseksi. Nykyään se toimii niin, että vedetään viiva kentän jokaiseen reunaan ja jos osutaan seinään, se keskeytyy.
######################### ..@.....................# #########################
Edit: Ehkäpä se on nyt parempi.
Kuvitellaan, että halutaan testata, että onko @:n näköetäisyys blokattuna ylimpään ja kaikkein oikeimpaan seinään (#). Viivaa vedetään, mutta tässä on se ongelma, että se osuu seinään jo paljon aikaisemmin ennen päätepistettä (n. puolessa välissä), jollain päätepiste (ylin ja kaikkein oikein) jää näkökentästä pois. Pelkkään käytävään on tietty kohtalaisen helppo säätää oma tarkistus, mutta ulkotiloissa (ja joskus huoneissa) asia menee vaikeammaksi.
Pitäisikö minun dumpata vain tämä viivanpiirtely (Oli mielestäni helpoin toteuttaa, ei ehkä toimivin.) ja yrittää tehdä uusi käyttäen jotain "älykkäämpää" tekniikkaa?
Itse olen käyttänyt tässä trigonometriaa Basicilla koodatessani. Se on melko hidasta, mulla C:llä se ei tuottane ongelmia.
Käytä muuten koodi-tagia lainauksen sijasta niin jokainen merkki vie yhtä paljon tilaa.
Voisitko vähän valaista, että miten käytät trigonometriaa hyväksesi näkökentän laskemiseen? Meni vähän ohi tuo äskeinen.
Ehkä selityksessäni oli vikaa. Tässä on nyt kuva mikä demonstroi tämän tavan heikkoutta. Siinähän on siis suorakulmainen huone, jonka pitäisi näkyä kokonaan. Tuohon minun pitäisi jotain korjausta keksiä. Tuollaisessa yksinkertaisessa paikoissa se on kohtalaisen helppoa, mutta keskellä kaupunkia se tuntuu melkein mahdottomalta. (;P)
Jos vaikka aina yhden pisteen edettyäsi tekisit näkyväksi myös kaikki sen viereiset pisteet? En tiedä, miten hyvin tämä käytännössä toimisi, mutta ainakin geneerisissä neliönmuotoisissa huoneissa se olisi varmaan aika hyvä ratkaisu.
Ihan hyvä ajatus, mutta se ei onnistu myöskään noissa huoneissa. Ulkona se taas vääristäisi sitä oikeaa näkökenttää.
Oikeastaan nuo yksinkertaiset huoneet eivät ole ongelmana, vaan suuret ja monimutkaiset paikat. Minulla kun ei ole mitään näköradiusta. Eikä tuo radiuskaan kovin hyvin auttaisi asiaan.
// Tässä ilman LOS-viivaa. ############<- Tuohon tähdätään laskuissa. #@.........# #..........# ############ // Tässä sen kanssa #######XXXXX #@XXXXX....# #..........# ############
Eli tuossa näkyy, miksi se ei pistä näkyväksi tuota "targetina" ollutta oikeaa yläkulmaa. Viiva menee yhden ylös, törmää seinään ja näin ollen trace loppuu.
Ulkona ollessa tämä taas tapahtuu talojen seiniin, muureihin, puuriveihin, jos vain kulma on liian pieni/suuri "seinään" nähden. Olen miettinyt silmät verille(?), että miten tuota nyt voisi kiertää, tahi korjata. Siinä kun on niin helppo sitten sotkea sitä "oikeaa" näkökenttää tuota korjaillessa. Eikä se algoritmi kyllä toimikaan vielä täysin oikein.
Mitä jos tähtäisit ikään kuin sen palikan lähimpään kulmaan? Koordinaatteina siis jotakin ja puolikas.
Numeron 9 koordinaatit olisivat (9 , 1) ja tarkistettava kulma (8,5 ; 1,5)
123456789 #@ # #########
Algoritmini siis käy läpi jokaisen merkin, "ampuu säteen" pelaajasta kohti kutakin ruutua. Jos tielle sattuu este, ruutua ei piirretä, muutoin piirretään.
Pelajaan ja ruudun välisen kulman lasken arkustangentilla.
Eikö se ole hirmuisen raskasta vetää jokaiseen pelialueen ruutuun yksi ray? Tosin tuolla saattaisinkin saada ratkottua puolet ongelmista. Täytyy testailla, jahka jaksaa. Koulun lisäksi ei jaksakaan niin kauheasti näitä hommia tehdä.
Ratkaisin asian sitten vähän purkan oloisesti: Kaikki, paitsi lattiat (.) piirretään aina sen jälkeen kun on nähnyt ne. Ja tietysti esineitä eikä hirviöitä piirretä jos niitä ei oikeasti nähdä. Mutta näin ongelma ei enää paina niin räikeästi esille ja on hieman vaikeampi havaita. Riittää minulle toistaiseksi, kiitos teille neuvoista ;).
Joo, on se totta kai raskasta, mutta se ainakin on uskoakseni täydellinen tapa, eikä sisällä aukkoja.
Aihe on jo aika vanha, joten et voi enää vastata siihen.