Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Allegro: GFX_VGA undeclared

Sivun loppuun

Andu [25.09.2006 18:32:51]

#

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ä?

Metabolix [25.09.2006 18:47:39]

#

Kokeilepa laittaa tilalle GFX_AUTODETECT.

Andu [25.09.2006 19:11:41]

#

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?

Metabolix [25.09.2006 19:25:16]

#

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()

Andu [25.09.2006 19:34:49]

#

Nyt toimii GFX_AUTODETECT:llä. Saisiko jotenkin toimimaan myös GFX_VGA:lla?

Metabolix [25.09.2006 19:45:29]

#

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.

Andu [25.09.2006 19:59:26]

#

En tarvitsekkaan sitä mihinkään :D
Kiitos tästä!

Andu [27.09.2006 18:22:26]

#

Miten Allegrolla voi ladata .png ja .gif tiedostoja? Itse en löytänyt tälläistä funktiota.
Voiko esim. OpenGL:lä ladata?

Metabolix [28.09.2006 13:31:01]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta