Teen peliä, jossa liikutaan samaan tyyliin kuin esimerkiksi diabloissa. Ongelmana kuitenkin on, etten saa laskettua hiiren ja ukon muodostaman suoran ja X-akselin välistä kulmaa. Kuinka tämän siis saa laskettua?
Ei tää trikonometria taida olla kovin hyvin hallussa...
Edit: typo
Jos ukon koordinaatit ovat ux, uy ja hiiren hx, hy, saadaan kulman tangentti kaavasta:
tan(a) = (uy - hy)/(ux - hx). Tästä saadaan kulmalle kaava:
a = ATAN((uy - hy)/(ux - hx))
Kielestä riippuu, kuinka tuo tehdään ohjelmakoodiin. Täytyy erikseen tarkistaa, ettei jakaja ole nolla tai käyttää funktiota ATAN2(uy-hy,ux-hx) tai jotain vastaavaa.
Tuollaisen kaavan itsekin sain johdettua, mutta eipä tunnu toimivan. Sanokaas nyt sitten onko muussa koodissa jotain vikaa?
rad = Atn((Hero.y - MPos.y) / (Hero.x - MPos.x)) Hero.x = Hero.x + Sin(rad) * 3 Hero.y = Hero.y + Cos(rad) * 3
Diabloissahan liikutaan ruudukkosysteemillä, ei siihen mitään trigonometriaa tarvita..? Kai nuo koordinaatit on ilmoitettu liukulukuina eikä kokonaislukuina? Se selittäisi kaikki ongelmat. Muuten en löydä tuosta sen kummempia vikoja, enintään tyyppi liikkuu väärään suuntaan, mutta se selviää tarvittaessa vaihtelemalla lukujen paikkoja... (y / x -> x / y)
Atn palauttaa oikean arvon vain välillä -pi/2..pi/2. Eli lisää sen perään:
rad = Atn((Hero.y - MPos.y) / (Hero.x - MPos.x)) if (Hero.x - MPos.x) < 0 then rad = rad + pi Hero.x = Hero.x + Sin(rad) * 3 Hero.y = Hero.y + Cos(rad) * 3
(Hmm, toivottavasti se meni oikein.)
Nyt koodin pitäisi olla tuolta osin kunnossa. Kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.