Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Kuvan pyörittäminen sottaa ruudun

Sivun loppuun

rausku [01.01.2005 13:24:55]

#

käytän c++:saa ja allegroa.

Saan kuvan pyörimään, mutta se sottaa ruudun. Mikä siinä on vikana?

#include <allegro.h>

int main(){

allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT,640,480,0,0);

BITMAP *sprite;
BITMAP *tausta;
BITMAP *spriten_tausta;
BITMAP *taustapuskuri;
PALETTE pal;

int x=150;
int y=150;
int kulma=0;

sprite=load_bitmap("kuva.bmp",pal);
tausta=load_bitmap("tausta.bmp",pal);
spriten_tausta=create_bitmap(44,4);
taustapuskuri=create_bitmap(640,480);

blit(tausta,taustapuskuri,0,0,0,0,640,480);

while(!key[KEY_ESC]){
blit(taustapuskuri,screen,0,0,0,0,640,480);

blit(tausta,spriten_tausta,x,y,0,0,44,4);
blit(spriten_tausta,taustapuskuri,0,0,x,y,44,4);

kulma++;
if(kulma>255)kulma=0;
rotate_sprite(taustapuskuri,sprite,x,y,itofix(kulma));

}

}

END_OF_MAIN();

BlueByte [01.01.2005 14:41:54]

#

hmmmmm ei mitään tietoa mutta veikkaan ettet siivonnut niitä piirtämääsi pyörivän kuvan jälkiä

rausku [01.01.2005 17:30:34]

#

En ainakaan itse tiedä unohtaneeni mitään. Ainakin tuolla koodilla saa kuvan liikkumaan sotkematta taustaa, mutta pöyritys ei suju.

Jaska [01.01.2005 21:52:16]

#

Kuvan pyörittäminen sujúu trigonometrian avulla. Jos pistettä (x,y) pyöritetään origon ympäri kulman a verran, on uudet koordinaatit (x cos a, y sin a). Nopeampaa on tietysti approksimoida trigonometrisiä funktioita Taylorin polynomin avulla.

rausku [02.01.2005 09:38:21]

#

Sorry vaan mutten ymmärtänyt(aloittelija kun olen), voisitko antaa esimerkin?

Sharph [02.01.2005 09:52:57]

#

rotate_sprite-funktio hoitaa nuo jaskan mainitsemat asiat, ja minulla se ainakin hoiti pyörityksen todella kauniisti, silloin kun vielä allegroa käytin.

thefox [02.01.2005 09:56:06]

#

Jaska puhuu nyt ihan omiaan kysymyksen ulkopuolelta.

Tuo kuvan sottaaminen johtuu varmaankin siitä, että kun kuvaa pyöritetään, tausta ei enää mahdu tuohon spriten_tausta-bittikarttaan. Jos otat esimerkiksi pari A4:sta, laitat ne päällekkäin, pyörität päällimmäistä vaikka 45 astetta, niin huomaat, että päällimmäinen ei millään mahdu alemman "sisään".

Eli ratkaisu on suurentaa tuota spriten_tausta-bitmappia. En sitten tiedä tarjoaako Allegro tuolle ongelmalle jotain valmista ratkaisua.

rausku [02.01.2005 10:58:38]

#

Nyt toimii, kiitos.

Olli Vanhoja [04.01.2005 17:40:40]

#

Voi tietty olla parempi idea tyhjentää näyttö joka kerta ennenkuin laittaa ruudulle uudessa asennossa olevan kuvan.

thefox [04.01.2005 17:48:54]

#

Tuossa nyt ilmeisesti kuitenkin käytettiin jotain taustakuvaa. Tietysti yksi mahdollisuus olisi myös piirtää koko roska aina uusiksi (ensin tausta, ja sitten spritet päälle joka framella) mutta se olisi paljon hitaampaa kuin taustan tallentaminen vain tarvittavista kohdista.

Olli Vanhoja [04.01.2005 21:47:39]

#

no kyllä double bufferin kanssa jo 386 konekkin jaksaa piirtää koko kuvan ihan uusiksi vaikka olisikin muutamia bitmappeja ja erikseen laskettavia elementtejä kuvassa, että en näkisi sitä ongelmana.

thefox [04.01.2005 22:31:50]

#

Minä näkisin, varsinkin jos resoluutio on suuri ja spritejä on paljon.


Sivun alkuun

Vastaus

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

Tietoa sivustosta