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äännyMiksi 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ä taustaJos 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); // TuhoaminenToinen, 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.