Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Allegro-oppaita

Sivun loppuun

Jartsala [11.06.2007 23:54:24]

#

Mistä löytyis monipuolisia ja hyviä Allegro oppaita (mieluiten suomenkielisiä ja nimenomaan peliohjelmointiin ja tietty 2D)

Jartsala [12.06.2007 11:53:17]

#

Niin ja tosiaan mitäs sinne linkkeriin pitikään pistää että saa nuo Allergon funktiot ja muut toimimaan oikein?, opas löytyikin jo.

TsaTsaTsaa [12.06.2007 12:17:34]

#

-lalleg?

Jartsala [12.06.2007 12:53:11]

#

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)

Metabolix [12.06.2007 14:31:41]

#

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.

tgunner [12.06.2007 16:16:26]

#

Jartsala kirjoitti:

opas löytyikin jo.

Jos saa udella, niin mistä löysit tämän suomenkielisen allegro-oppaan? Linkkiä jakoon, mars!

Jartsala [12.06.2007 18:10:58]

#

http://www.suomipelit.com/index.php?c­=naytaartikkeli&id=14&s=1

Jartsala [12.06.2007 20:30:43]

#

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.

Pekka Karjalainen [12.06.2007 20:59:22]

#

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 .

Jartsala [14.06.2007 20:13:06]

#

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

Metabolix [14.06.2007 20:56:42]

#

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.

Jartsala [14.06.2007 21:26:11]

#

Juu kiitosta, Double Bufferoinnilla onnistui.


Sivun alkuun

Vastaus

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

Tietoa sivustosta