Vuosi sitten yritin Allegroa käyttää, mutta en siitä mitään tajunnut ja nyt yrittäisin uudestaan. Tämän koodin olen pöllinyt Suomipelien Allegro-oppaasta:
#include <stdio.h> #include <allegro.h> // allegron otsikkotiedosto int main(void) { // Ensin alustetaan Allegro allegro_init(); // Sitten näppäimistö install_keyboard(); // Sitten laitetaan oikea grafiikkatila set_gfx_mode(GFX_VGA,320,200,0,0); // Odotellaan näppäimen paimallusta while(!key[KEY_SPACE]){} // Lopetetaan Allegro allegro_exit(); return(0); }
Linkkerin parameterinä lukee: -lalleg
Ja tälläistä virheilmoitusta heittää:
C:\...\main.cpp In function `int _mangled_main()': 14 C:\...\main.cpp `GFX_VGA' undeclared (first use this function) (Each undeclared identifier is reported only once for each function it appears in.) C:\...\Makefile.win [Build Error] [main.o] Error 1
Mitä siis pitäisi tehdä?
Kokeilepa laittaa tilalle GFX_AUTODETECT.
Heittää eri erroreita:
[Linker error] undefined reference to `WinMain@16' collect2 C:\...\collect2 ld returned 1 exit status C:\...\Makefile.win [Build Error] [testi.exe] Error 1
Mikäs nyt on vialla?
Nyt taitaa olla vialla sellainen, että tuosta puuttuu Allegron kuuluisa END_OF_MAIN()
, joka siis kuuluu sijoittaa juuri main-funktion jälkeen. Se on Allegron makro, jonka paikalle Windowsissa laajennetaan WinMain-funktio, josta ohjelman suoritus varsinaisesti alkaa.
Siis
int main(void) // int main(int parametreja, char ** parametrit), jos ei näin toimi. { return 0; } END_OF_MAIN()
Nyt toimii GFX_AUTODETECT:llä. Saisiko jotenkin toimimaan myös GFX_VGA:lla?
GFX_VGA on varmaankin vain DOS-kääntäjiä varten. Ainakaan Linuxissa se ei saa koko ikkunaa aikaiseksi, ja Windowsille säädetyissä otsikoissahan sitä ei sitten ilmeisesti ollut lainkaan. Mihin sitä tarvitsisit? Jos et aivan erityisesti ole tekemässä DOS-peliä 486:lle, niin parempihan se vain on käyttää Windows-systeemejä ja saada enemmän tiloja käyttöön. Kokoruututilan ja ikkunan välillä pitäisi voida valita lipuilla GFX_AUTODETECT_FULLSCREEN ja GFX_AUTODETECT_WINDOWED.
En tarvitsekkaan sitä mihinkään :D
Kiitos tästä!
Miten Allegrolla voi ladata .png ja .gif tiedostoja? Itse en löytänyt tälläistä funktiota.
Voiko esim. OpenGL:lä ladata?
Allegrolle on loadpng-kirjasto, josta on myös devpak.
OpenGL:lle on glpng-kirjasto, josta olen itse koonnut jotakin helpommin käytettävää, kun niin monella on ollut vaikeuksia saada homma toimimaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.