juu elikkäs pitäs saada selville, että kuinka pelaajaa liikutetaan esim jos kulma = 85 , niin paljon sitten x:ään ja y:tä lisätään että pelaaja liikkuu nappia ylöspäin painaessa 85 aseteen suuntaisesti.
Itse kyhäilin tälläistä mutta ei oikein onnistunut
Funktiot:
int pyorita_x(SDL_Surface *kuva,int x,int y,int kulma){ int uusi_x = x*cos(kulma) - y*sin(kulma); return uusi_x; } int pyorita_y(SDL_Surface *kuva,int x, int y,int kulma){ int uusi_y = y*cos(kulma) + x*sin(kulma); return uusi_y; }
Käyttö:
if (nappi[SDLK_UP]){ pelaaja.x = pyorita_x(pelaaja1,pelaaja.x,pelaaja.y,pelaaja.kulma); pelaaja.y = pyorita_y(pelaaja1,pelaaja.x,pelaaja.y,pelaaja.kulma); }
if (nappi[SDLK_UP]) { pelaaja.x += cos(pelaaja.kulma); pelaaja.y += sin(pelaaja.kulma); }
Ei liene sen monimutkaisempaa?
Sitten tuohon lisäät vielä jonkin kertoimen, jotta pelaaja liikkuu sopivalla nopeudella.
Niin ja sitten pitää muistaa että jos haluaa pelistä sellaisen, että pelaaja liikkuu päivitysnopeudesta rippumatta aina saman verran tietyssä ajassa, niin pitää tuo ajan muutos vielä suhteuttaa tuohon - eli esim. kertoa sillä.
Ja sitten tulee mieleen, että kulman ei ehkä kannata olla int. Tai ainakin 85 astetta on hieman hankala saavuttaa koska loogisesti 85° on 1,484, mutta sehän pyöristyisi arvoksi 1, joka on 57,296°.... Toki 85° on mahdollista saavuttaa kokonaislukuradiaaneillakin (vaikka 65799), mutta aika hankalaksi menee.
Grez kirjoitti:
Toki 85° on mahdollista saavuttaa kokonaislukuradiaaneillakin (vaikka 65799), mutta aika hankalaksi menee.
Ei ole. Pii on nimittäin transkendenttiluku.
Joo mutta ongelmahan on se, että kun SDL:än BlitSurfacen x ja y ei voi olla float tai yleensäkkään mikään liukuluku muuttuja?
Jaska kirjoitti:
Ei ole. Pii on nimittäin transkendenttiluku.
Noh noh, eipäs nyt nussita pilkkua. Pointti oli että riittävän lähelle 85° (tässä tapauksessa 3 desimaalin tarkkuudella), eihän tarkasti 85° ole mahdollista saavuttaa radiaaneina käyttämällä liukulukuakaan.
kayttaja-3842 kirjoitti:
Joo mutta ongelmahan on se, että kun SDL:än BlitSurfacen x ja y ei voi olla float tai yleensäkkään mikään liukuluku muuttuja?
En näe ongelmaa, puhe oli kulmasta, ei X:stä tai Y:stä.
Grez kirjoitti:
kayttaja-3842 kirjoitti:
Joo mutta ongelmahan on se, että kun SDL:än BlitSurfacen x ja y ei voi olla float tai yleensäkkään mikään liukuluku muuttuja?
En näe ongelmaa, puhe oli kulmasta, ei X:stä tai Y:stä.
Jaa niin tosiaankin.
Edit1:
Mutta nytten se toimii kiitosta vaan.
Grez kirjoitti:
Jaska kirjoitti:
Ei ole. Pii on nimittäin transkendenttiluku.
Noh noh, eipäs nyt nussita pilkkua.
En nussikaan. Matematiikka on hyvin eksakti tiede ja ei siinä pidä asioita sanoa sen kummemmin miettimättä. Olen tässä tapauksessa tarkka, mutta en viisastelija. Olisit alun perin sanonut, että kyseinen arvo saadaan riittävän lähelle 85 astetta l^1-normin suhteen, niin mitään ongelmaa ei olisi ollut!
Jaska kirjoitti:
En nussikaan. Matematiikka on hyvin eksakti tiede...
Itse olisin kyllä eri mieltä, sillä:
- tämä on ohjelmointifoorumi eikä matematiikkafoorumi
- aihe oli enemmän käytännönläheinen kuin teoreettinen
- funktioilla joita tässä yhteydesäs käsiteltiin ei muutenkaan voi käyttää tarkkoja arvoja.
Aihe on jo aika vanha, joten et voi enää vastata siihen.