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 1Mitä 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.