Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Hiireen katsominen

Sivun loppuun

mika132 [18.04.2010 20:46:21]

#

Eli olen täysin unohtanut ne rad2 funktiot päästäni ja sen miten hahmon sai katsomaan hiirtä kohti. Sen muistan että sin/cos oli siinä käytössä, mutta en muista miten, joten pyydän pientä muistutusta. :)

Teuro [18.04.2010 20:53:32]

#

Jos hiiren koordinaatit ovat 100, 100 ja hahmo on pisteessä 400, 400, niin mihin mihin kulmaan suora pisteestä hiiri pisteeseen hahmo tulee piirtää suhteessä x-akseliin? Kulma kahden suoran välillä saadaan (suorakulmaisessa kolmiossa) tangentin avulla. tan(alfa) = delta_y / delta_x; Tästä saadaan kulmalle pyöritettyä muoto alfa = atan2(delta_y / delta_x); Tämä pitää sitten vielä muuntaa asteiksi tuota rotozoom funktiota varten.

Metabolix [18.04.2010 20:54:48]

#

Kyllä ne funktiot yhä keskustelusta löytyvät, kun vain selaat taaksepäin. Voit myös kokeilla hakua.

mika132 [18.04.2010 21:47:02]

#

Tuohonhan oli vain muutama pikku rivi. Käytettiin double nimisiä muuttujia, mutta en saa nyt päähäni, että mitä ne olivat. rad2degin jo muistinkin, mutta en tuota miten lasketaan x_jana ja y_jana ja miten sitä hyödynnettiin sen katseen kanssa.

mika132 [19.04.2010 18:21:26]

#

Sain toimimaan, mutta minulla on sama virhe kuin ensimmäisellä kerralla enkä muista mistä johtuu hahmo pyörii nimittäin poikittain. ns. Oikea kylki on hiiren suuntaan.

double rad2deg(double rad){
    return ((rad * 180) / 3.1415927);
}
int napit, x_x, y_y;
napit=SDL_GetMouseState(&x_x, &y_y);

    int x_jana = (x_x - hahmo.x);
    int y_jana = (y_y - hahmo.y);

    double kulma = std::atan2((double)x_jana, (double)y_jana);

temp = rotozoomSurface(kuvat::hahmo, rad2deg(kulma), 1, 1);
piirra_kuva(temp, hahmo.x, hahmo.y, false);

Toinen ongelma on se, että kun noin 5sek on hahmoa pyörittänyt se jää jumiin. Ei pyöri enää.

Spongi [19.04.2010 18:29:29]

#

Muista että nollakulma on oikealla, eli kuvan täytyisi osoittaa sinne oletuksena. Voit toki vaihtoehtoisesti vähentää kulmasta 90 astetta.
Tuo toinen ongelmasi johtuu luultavasti jostain aivan muusta.

mika132 [19.04.2010 18:37:30]

#

Juu sainkin tuon ensimmäisen jo ratkaistua, mutta en tuota toista. Tarkalleen yhden kiepauksen ehtii tekemään ja sitten pysää. Oudointa on, että ei tuo peli kaadu vaan hahmo vain pysää eikä liiku vaikka tekisi mitä.

Pystyn edelleen nimittäin palaamaan alkuvalikkoon tuon pysäämisen jälkeen joten siitä tiedän, että ei se peli kaadu.

Metabolix [19.04.2010 19:43:05]

#

Muistatko vapauttaa luomasi käännetyn pinnan?

mika132 [19.04.2010 20:00:06]

#

Ei vaan minulla oli vahinkossa kaksi samaan nappulaan liittyvää ominaisuutta.

Yksi ongelma on ollut pitkään enkä tiedä edes mistä se johtuu. Annan kuvan:
Tässä kuva

Eli miksi tuohon karttaan tulee reikä. Se ei niinkuin päivitä karttaan pois tuota taustaa vaikka pitäisi.

jalski [19.04.2010 20:36:46]

#

mika132 kirjoitti:

Yksi ongelma on ollut pitkään enkä tiedä edes mistä se johtuu. Annan kuvan:
Tässä kuva

Eli miksi tuohon karttaan tulee reikä. Se ei niinkuin päivitä karttaan pois tuota taustaa vaikka pitäisi.

SDL ei ole minulle tuttu, mutta arvaukseni on, että et ole asettanut piirrettävälle spritelle color key:tä. Color key määrittelee, mikä väri spritestä käsitellään läpinäkyvänä. Alpha-kanavan käyttö spriten piirrossa taitaa olla toinen mahdollinen tapa?

Esim. tuolta voit luntata color key:n käytön: http://gamedevgeek.com/tutorials/moving-sprites-with-sdl/


Suosittelen muuten tutustumaan spriten piirtoon ilman valmiita funktioita ja toteuttamaan läpinäkyvyyden perinteisesti maskin avulla tai vielä yksinkertaisemmin siten, että piirtorutiini jättää tietyn värin piirtämättä näytölle.

mika132 [19.04.2010 21:43:14]

#

Minulla on tuollainen systeemin, että valkoinen (255, 255, 255) on läpinäkyvä mutta ei toimi. Se näyttää tuon valkoisen silti, kun taas sama systeemi on nappuloissa (Aloita peli, Lataa peli, Lopeta peli) niin valkoista ei näy. Eli jotenkin tuo on sekaisin, mitä pitäisi poistaa ja mitä ei.

Metabolix [19.04.2010 22:43:39]

#

En hukkaa aikaa asian selittämiseen vaan selitän suoraan ratkaisun: Kaikkein helpoimmalla pääset, kun siirryt PNG-kuviin, joihin teet jo kuvankäsittelyohjelmalla läpinäkyvät reunat, jolloin SDL_SetColorKey-funktiota ei enää tarvita. Näiden kuvien lataamiseen tarvitset SDL_image-kirjastosta IMG_Load-funktion. Muuten kaikki toimii entiseen malliin.


Sivun alkuun

Vastaus

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

Tietoa sivustosta