Mistä löytyis monipuolisia ja hyviä Allegro oppaita (mieluiten suomenkielisiä ja nimenomaan peliohjelmointiin ja tietty 2D)
Niin ja tosiaan mitäs sinne linkkeriin pitikään pistää että saa nuo Allergon funktiot ja muut toimimaan oikein?, opas löytyikin jo.
-lalleg?
Hmm, ei näemmä...
Siis asensin Dev-C++ sitten Allegron siihen aloitan uuden projektin Windows application sitten lisään siihen tämän koodin
#include <stdio.h> #include <allegro.h> int main(void) { allegro_init(); install_keyboard(); set_gfx_mode(GFX_VGA,320,200,0,0); while(!key[KEY_SPACE]){} allegro_exit(); return(0); }
en lisää mitään linkkeriin
sitten Compile & Run ja se valittaa:
`GFX_VGA' undeclared (first use this function)
Saisivat ihmiset opetella eron kääntäjän ja linkkerin välillä... Tuo ei ole linkkerin ongelma vaan kääntäjän, ja syy on se, että käytät jotakin ikivanhaa opasta, joka neuvoo väärin (tai vähintäänkin rajallisesti). Tuollaista GFX_VGA-lippua ei Windows-implementaatiossa ole olemassakaan, luultavasti se on ollut DOSia varten. Hakemalla virheilmoituksella olisit löytänyt aiemman keskustelun Allegro: GFX_VGA undeclared, jossa on ohjeet ongelman ratkaisemiseksi — ja luultavasti jokusen muunkin ongelman, kannattaa lukea koko keskustelu läpi.
Jartsala kirjoitti:
opas löytyikin jo.
Jos saa udella, niin mistä löysit tämän suomenkielisen allegro-oppaan? Linkkiä jakoon, mars!
Jepa sain toimimaan mutta mulla olis kysymys tästä koodipätkästä
#include <allegro.h> // Täytyyhän allegron kirjasto lisätä int main(int argc, char *argv[]) { allegro_init(); // valmistellaan allegro install_keyboard(); // Asennetaan näppis set_color_depth(16); // Säädellään värit set_gfx_mode(GFX_AUTODETECT, 640,480,0,0); //Vaihdetaan graffamoodia BITMAP *kuva; //luodaan muuttuja johon datat asetetaan kuva = load_bitmap("kluva.bmp", NULL); //ladataan kuvae readkey(); //Venaa napinpainallusta blit(kuva, screen, 0,0,0,0,480,360); //flipataan ruudulle readkey(); //Venaa että käyttäjä painaa nappia destroy_bitmap(kuva); //Vapauttaa bitmapdatan return(0); } END_OF_MAIN()//Ilman tätä tää ei välttämättä käänny
Miksi tuo kuva ladataan silmukan sisällä??? Joka paikassa on sanottu ja ohjeissa ollu että ohjelman alussa ladataan yleensäkkin kuvat, ja ihan järjelläkin kun ajattelee.
Jartsala kirjoitti:
Miksi tuo kuva ladataan silmukan sisällä???
Kuvaa ei ladata silmukan sisällä, koska ohjelman main-funktiossa ei ole silmukkaa. Kun teet pidemmän ohjelman, jossa on silmukka, et tietenkään lataile samaa kuvaa aina uudestaan silmukan sisällä.
Allegron Examples-hakemistossa on esimerkkiohjelmia, joissa ladataan jokunen bitmappi ja sitten pyöritetään silmukkaa. Katso vaikka exlights.c .
Noni nyt toimii, mutta jälleen sama ongelma kuin SDL:llässä oli mutta sain sen ratkaistua mutta allegrossa en...
Eli miten allegrossa piirretään kaksi kuvaa päällekkäin
ilman että ne alkavat välkkymään?
Tuossa on koodipätkäni
BITMAP *my_pic = load_bitmap("picture.bmp", NULL); // lattaappas itse kuva BITMAP *my_pak = load_bitmap("back.bmp", NULL); // ja lattaappas tausta blit(my_pic, screen, 0,0,px,py,480,360); //Piirrä kuva blit(my_pak, screen, 0,0,0,0,480,360); //Piirrä tausta
Jos olisit sitä SDL-ratkaisua hieman tutkiskellut ja yrittänyt ymmärtää (kuten olisi parasta aina tehdä; ei ole järkeä käyttää ohjelmassaan koodia, jota ei lainkaan ymmärrä), olisit ehkä huomannut sanat double buffer. Sitten Googlen kanssa etsimällä sanoilla allegro double buffer olisit helposti löytänyt ohjeet tämän toteuttamiseen. Tässä tiivistelmä: Ensin luodaan ruudun kokoinen puskuri, sitten piirrettäessä piirretäänkin tähän puskuriin, ja kun kaikki on piirretty puskuriin, piirretään puskuri ruudulle. Lopuksi puskuri täytyy tietenkin vapauttaa. Jos puskuria ei aina piirretä aivan täyteen, se voi olla syytä tyhjentää välillä.
BITMAP *puskuri = create_bitmap(leveys, korkeus); // Luonti while (kaynnissa) { clear_bitmap(puskuri); // Tyhjennys blit(kuva, puskuri, 0, 0, x0, y0, x1-x0, y1-y0); // Piirto puskuriin blit(puskuri, screen, 0, 0, 0, 0, leveys, korkeus); // Piirto ruudulle } destroy_bitmap(puskuri); // Tuhoaminen
Toinen, ehkä parempi konsti, on sivunvaihto, josta voit lukea vaikkapa AllegroWikin sivulta Page flipping.
Juu kiitosta, Double Bufferoinnilla onnistui.
Aihe on jo aika vanha, joten et voi enää vastata siihen.