La licencia de Allegro es absolutamente clara excepto si es abogado. No
obstante está escrita de forma bastante informal, así que este mini-FAQ
intenta clarificar algunas cosas.
Make es parte de la distribución estándar de djgpp, en
v2gnu/mak*b.zip (el numero de la ultima versión). Puede obtenerlo de
http://www.delorie.com/djgpp/.
¿Está seguro de que tiene djgpp instalado correctamente? Revise las
instrucciones del fichero de djgpp readme.1st, y en particular cuide
haber ajustado la variable de entorno de DJGPP y añada el directorio
djgpp\bin a su path.
¿Está seguro de estar usando el programa make de GNU, en vez de algún
otro como el de Borland? Si no lo sabe, ejecute make -v y compruebe
que visualiza el mensaje de copyright de GNU.
¡No debería ejecutar make desde el explorador de Win95! Abra una
sesión de DOS, vaya al directorio de Allegro, y ejecute make desde la
línea de comandos.
¿Seguro que tiene la fecha del sistema ajustada correctamente?
Alternativamente, quizás haya descargado un fichero recientemente hecho
por alguien en una zona temporal al este. En este caso puede esperar
unas horas, adelantar su reloj temporalmente, o usar una utilidad como
touch para modificar la marca temporal de los ficheros.
Tal y como el mensaje de error sugiere, necesita liberar más memoria
para el compilador. El programa go32-v2 le dirá cuanta tiene
disponible. Si está en DOS, intente liberar espacio de disco duro para
los ficheros temporales. Bajo win95, incremente el límite de memoria
DPMI en las propiedades de su sesión DOS a 65535 (tendrá que escribir
esto a mano, ya que la lista desplegable sólo llega hasta 16384).
Tal y como el mensaje de error sugiere, hay un conflicto entre la nueva
versión del gcc y versiones antiguas de la libc. Debe actualizar su
paquete djdevxxx.zip a la última actualización (fecha 11 de Agosto del
2002) de DJGPP-2.03 o posterior.
C:\TEMP\ccdaaaaa(.text+0x9):x.c: undefined reference to
`allegro_init'
C:\TEMP\ccdaaaaa(.text+0xe):x.c: undefined reference to
`install_keyboard'
No ha leído los manuales, ¿lo hizo? :-) Necesita enlazar su programa
con la biblioteca de funciones, liballeg.a. Primero, asegúrese de que
ha instalado todo correctamente (ejecutar make install debería hacer
esto por usted). Segundo, si esta compilando desde la línea de comandos
o desde un makefile, añada -lalleg al final de su línea de comando de
gcc, o si esta usando Rhide, vaya al menú Options/Libraries, entonces
teclee alleg en la primera línea vacía, y asegúrese de que la caja al
lado está marcada.
No, lo siento. Para empezar, liballeg.a ocupa unos 450k, pero
probablemente querrá varias utilidades como el grabber, la
configuración de sonido, etc. ¿Y que hay de los programas de ejemplo?
Si incluyese la versión compilada de todo, la distribución binaria
sobrepasaría las 7 megas: ¡demasiado grande para ser práctico! Pero
seriamente, no hay ninguna razón por la que no pueda compilar la
librería usted mismo. El compilado de un programa es un proceso
determinista: dado un fichero de entrada particular y una línea de
comando, siempre producirá la misma salida. Si esto no funciona, o
tiene ficheros de entrada incorrectos (su copia de Allegro esta
estropeada en algún sentido), o la línea de comandos es incorrecta (es
difícil que eso suceda, ya que solo tiene que teclear make...) o su
compilador está estropeado, por ejemplo, si no instala djgpp
correctamente. Necesita solucionar el problema en vez de ocultarlo
bajo la alfombra consiguiendo que otro compile Allegro por usted...
Las herramientas GNU escriben los mensajes de error a stderr.
Desafortunadamente, command.com es demasiado estúpido para redirijir
el flujo, pero afortunadamente DJ fue suficientemente listo para
evitar esto, por lo que puede usar su programa redir para capturar
los mensajes de salida, por ejemplo
redir -eo make > logfile.txt
Las respuestas pueden variar. Algunas personas dicen que hay problemas,
mientras que otras dicen que todo funciona bien. Use la versión Windows
de Allegro si quiere hacer programas para Windows. Si quiere ejecutar
programas para DOS, ¡use DOS!
Si, pero con problemas. Si está usando la versión OpenDOS de EMM386,
debe desactivar su implementación DPMI (especifica DPMI=OFF en la
línea del driver EMM386.EXE de tu config.sys). También debería
acordarse de activar la bandera PIC=OFF, pero ese es el estado por
defecto, por lo que no habría problemas con ello a no ser que lo haya
cambiado antes.
No puede. El límite está impuesto por el hardware de la VGA, no por
Allegro. Para acceder a más de 256k de memoria de vídeo necesita usar
un modo SVGA, lo cual significa cambiar a una resolución mayor o
conseguir una copia del programa SciTech Display Doctor, el cual
provee algunos modos SVGA de baja resolución.
Para algunas personas si, pero no para otras. El problema es que
Creative Labs se niega a revelar información interna sobre la tarjeta,
por lo que no podemos escribir un driver para ella. Quéjese a ellos, o
compre una tarjeta de un fabricante diferente más razonable.
Esto puede ser porque tiene el volúmen muy bajo: pruebe modificarlo
desde el programa setup. Además, Allegro mezcla varios sonidos en un
solo buffer de salida, a diferencia del reproductor de sonidos de
Windows que sólo reproduce un sonido a la vez, por lo que cada sonido
individual sólo puede obtener un porcentaje del volumen total de
salida. Este es el precio que hay que pagar por el mezclado múltiple
de canales. Si no le gusta, use el programa setup para alterar el
número de canales: el número puede ser una potencia de dos menor o
igual a 64, y cuanto menor sea, mayor será el volúmen del sonido.
Alternativamente, use set_volume_per_voice(), tal y como se describe
en la documentación. Esto le permite ajustar el volumen general de
la salida de sonido digital de Allegro.
Pruebe usar un driver FreeBE/AF (http://www.talula.demon.co.uk/freebe/),
o el programa comercial SciTech Display Doctor (http://www.scitechsoft.com).
Si sigue sin funcionar, publique una descripción de su problema a la
lista de correo de Allegro, junto con una copia de la salida que
producen los programas afinfo y vesainfo.
La interfaz VBE/AF ya proporciona eso para los drivers de vídeo:
compruebe el proyecto FreeBE/AF en http://www.talula.demon.co.uk/freebe/.
Para cosas más generales como las rutinas de sonido, VESA, y las
rutinas del modo-X, esto sería terriblemente difícil de conseguir
debido a que los drivers dependen mucho de las rutinas de ayuda del
núcleo de la biblioteca. El formato DXE no es lo suficientemente
flexible como para soportar esto, y no queremos que Allegro dependa de
otros paquetes de enlazado dinámico.
Bueno pues, entonces necesita incrementar el tamaño de su entorno :-)
Puede hacer esto alterando la configuración de su sesión DOS (haga
click en el menú de sistema y seleccione "propiedades"), o en el
arranque de su config.sys (ej: añada shell=c:\command.com /e:8192).
Bueno pues, entonces necesita incrementar el tamaño de su entorno :-)
Puede hacer esto alterando la configuración de su sesión DOS (haga
click en el menú de sistema y seleccione "propiedades"), o en el
arranque de su config.sys (ej: añada shell=c:\command.com /e:8192).
Asegúrese de que no tiene un punto y coma al final de la variable
MSVCDIR si está usando MSVC, al final de la variable MINGDIR si está
usando MingW o al final de la variable BCC32DIR si está usando BCC.
Además ejecute make -v desde la línea de comando para asegurarse de
que está usando el programa make de GNU y no el de Borland o Microsoft.
Necesita indicarle a su compilador dónde encontrar los ficheros de
cabecera y librerías de DirectX: ponga las rutas de los directorios
/include y /lib del kit de desarrollo DirectX en la ruta de su
compilador/enlazador. Alternativamente, si no quiere modificar nada de
su configuración, puede copiar directamente esos ficheros del kit de
desarrollo de DirectX a los directorios correspondientes de su
compilador.
Necesita actualizarse a una versión más reciente del SDK de DirectX,
como mínimo versión 5, que puede obtener de la web del desarrollador
de Microsoft.
Si tiene software antivirus (por ejemplo de Norton o McAfee) trabajando
en segundo plano en su ordenador, pruebe a desactivarlo temporalmente.
Necesita escribir END_OF_MAIN() justo tras su función main(). Allegro
usa esto, junto con algo de magia del preprocesador, para convertir
su función main() normal en un punto de entrada WinMain() al estilo
Windows.
Asegúrese de que está creando una aplicación GUI para Windows, y no
una aplicación de consola para Windows. Esto es un parámetro cuando
crea el projecto con MSVC, Dev-C++ o Borland C++ Builder.
Alternativamente, esto se especifica desde la línea de comando con
la opción -subsystem:windows del enlazador de MSVC,
-Wl,--subsystem,windows para el compilador MinGW o -tW
para el compilador Borland C++. En cualquier caso, defina el
símbolo de preprocesador ALLEGRO_USE_CONSOLE antes de incluír
las cabeceras de Allegro si necesita realmente un programa de consola.
Alternatively, esto se especifica con el parámetro '-tW'
para el compilador de línea de comando de Borland C++, o
'-subsystem:console' para el enlazador de MSVC. Haga eso, o
#defina USE_CONSOLE al comienzo de su programa antes de
incluir los ficheros de cabecera de Allegro si necesita crear un
programa de consola.
Si su programa incluye de forma directa ficheros de cabecera de la API
Win32, compruebe la sección específica de windows de la documentación.
Si su programa sólo incluye ficheros de cabecera de la librería
estándar de C++, es posible que esté intentando compilar con gcc 3.x
para MingW; en este caso, defina el símbolo __GTHREAD_HIDE_WIN32API
en la línea de comando:
g++ -D__GTHREAD_HIDE_WIN32API program.cpp -lalleg
Desactive la actualización directa del driver de ventana de DirectX
usando la variable específica de configuración. Mire la sección
'Rutinas de configuración' en la documentación y el fichero plantilla
allegro.cfg para más detalles.
Desactive la actualización directa del driver de ventana de DirectX
usando la variable específica de configuración. Mire la sección
'Rutinas de configuración' en la documentación y el fichero plantilla
allegro.cfg para más detalles.
El grabber debe ser enlazado con el código en datedit.c. Pero no se
debería preocupar por hacer esto a mano: simplemente ejecute make y
eso recompilará todo para usted.
Necesita actualizar su versión de GNU binutils. Lea readme.txt para
descubrir la versión mínima requerida que necesita.
No a no ser que <foobar> esté mencionado en readme.txt como una de
las plataformas soportadas. Usted podría adaptar Allegro a ese
compilador, pero eso suele significar mucho trabajo. Si <foobar> es
un compilador de 16 bits para DOS como Borland C, puede olvidar
inmediatamente la idea :-)
WIP significa "work in progress" (versión en desarrollo), y se refiere
a los cambios más recientes en Allegro desde la última versión oficial.
Las versiones WIP de Allegro pueden obtenerse como parches de la página
web de Allegro (http://alleg.sourceforge.net/), y
normalmente son bastante estables, aunque no tan bien comprobadas como
una versión final.
¿Tiene una copia de patch.exe? Si no, vaya a conseguirla del mismo
lugar que consiguió el resto de djgpp: es una herramienta estándar de
la distribución del compilador. De forma similar, puede obtener la
versión compilada con Mingw de
http://sourceforge.net/projects/gnuwin32/.
Si tiene el programa patch pero no funciona correctamente, asegurese de
que está instalando el parche encima de la versión no modificada de
Allegro que esté intentando actualizar. (esta normalmente es la versión
oficial más reciente antes de la WIP, pero compruebe el fichero de texto
que viene con la WIP para estar seguro).
Este fichero se distribuye por separado en las versiones WIP. Está en:
http://alleg.sourceforge.net/wip.es.html. (alldata.zip)
Por supuesto: ¡así es como funciona el hardware de video! Sólo puede
haber una paleta de colores usada en un mismo momento. O convierte sus
imágenes para que usen la misma paleta o cambia a un modo gráfico
truecolor.
Busque en la página web de Allegro.cc (http://www.allegro.cc/)
algunas utilidades, como por ejemplo FixPal y Smacker.
El hardware de la VGA solo usa 6 bits para cada componente del color,
lo que significa que los valores de los colores rojo, verde y azul van
desde 0 a 63 en la paleta de colores, sin llegar a 255. Esto le da un
potencial de 2^18 = 262144 colores diferentes o 64 tonos de gris. Si
necesitas más, puede usar la función de la VESA 0x4F08 para
seleccionar un ancho de DAC de 8 bits, pero Allegro no soporta esto
directamente, y no se si esto se podría hacer en diferentes
ordenadores con hardware diferente.
Cuando está en un modo de 256 colores, la tarjeta VGA muestra el color
#0 alrededor del área de visualización (en modos truecolor usa el
color negro). El color desaparecerá en cuanto cambie la entrada #0 de
su paleta de colores para que sea negra.
Con gran difficultad :-) No existe un truco tan sencillo como alterar
la paleta de colores, por lo que tendrá que redibujar la pantalla más
clara u oscura. Podría dibujar rectángulos negros translúcidos sobre la
pantalla para oscurecerla, o usar draw_lit_sprite() para colorear el
bitmap mientras lo copia a la pantalla, pero tenga la certeza que estas
operaciones son costosas y requieren un PC rápido.
También, eche un vistazo a los paquetes de extensión de
http://www.allegro.cc (notablemente FBlend v0.5) que hacen
esta operación lo más rápido posible.
fade_in() y fade_out() sólo funcionan en modos de 8-bits con paleta.
Uno de los modos para hacer un fundido de bitmap es recorrer todos los
pixels y cambiarlos individualmente. Una alternativa es dibujar muchos
recuadros negros translúcidos sobre la pantalla. No obstante, estos
métodos pueden ser lentos. El ejemplo exxfade.c demuestra cómo hacer
fundidos entre dos bitmaps. Puede modificarlo para que haga fundidos
de/hacia una pantalla negra. Lea también la pregunta anterior.
Mire en la página web de Allegro (http://alleg.sourceforge.net/)
y busque algunas utilidades, como por ejemplo DTA y Smacker. También
puede usar ASE (Allegro Sprite Editor, http://ase.sourceforge.net), el
cual permite dibujar/editar cada frame de la animación y salvarla como
FLI. O puede usar The GIMP (http://www.gimp.org/) junto con su
plugin GFli, usando capas como frames, y salvando su trabajo como
file.fli. The GIMP también le permite editar ficheros FLI existentes.
En su programa de dibujo favorito, busque las barras de desplazamiento
RGB y arrastre las barras roja y azul tan alto como pueda (normalmente
hasta 255, pero depende de las unidades que use el software), y la
barra verde a cero. Esto creará una sombra de rosa fucsia, o como
otras personas prefieren llamarlo, magenta.
Recuerde que las posiciones de los vértices son almacenadas en formato
de punto fijo, debe usar la macro itofix() para desplazar sus
coordenadas 16 bits a la izquierda.
Recuerde que el ángulo de rotación es almacenado en formato de punto
fijo, por lo que debe usar la macro itofix() o desplazar sus
coordenadas 16 bits a la izquierda. Por ejemplo, rotate_sprite(bmp,
spr, x, y, itofix(32)) rotará el gráfico 45 grados.
Probablemente está intentando inicializar la estructura de diálogo con
un puntero a su bitmap, ¿verdad? Eso no funcionará porque el diálogo
es creado en tiempo de compilación, pero el bitmap es cargado en
tiempo de ejecución, por lo que el compilador todavía no sabe dónde
estará localizado. Necesita rellenar la estructura de diálogo con un
puntero nulo, y entonces copiar el puntero del bitmap real en el campo
dp como parte de su código de inicialización, tras haber cargado el
bitmap en la memoria.
Depende de lo que esté haciendo. Si sus imágenes son totalmente
opacas, no habrá ventaja al usar un sprite RLE, y probablemente será
más rápido si usa la función blit(). Si su gráfico tiene áreas
transparentes, un sprite RLE será casi siempre más rápido y pequeño
que la función draw_sprite(). Los sprites compilados son por regla
general un poco más rápidos que las otras funciones para imágenes
transparentes y bastante más rápidas para gráficos opacos, pero esto
puede variar. Se usan mejor con sprites pequeños en máquinas antiguas
en modo-x, y podrían ser más lentos que blit() si los usas en modos de
vídeo SVGA en un pentium (el gran tamaño de los sprites compilados
afecta severamente la efectividad del cache).
Debe asegurarse que la lógica de su juego se actualiza a una
velocidad constante, pero se salta el refresco de la pantalla de vez
en cuando si el ordenador es muy lento. Esto puede hacerse instalando
un temporizador que incrementará una variable global a la velocidad de
la lógica de su juego, eg:
volatile int speed_counter = 0;
void increment_speed_counter()
{
speed_counter++;
}
END_OF_FUNCTION(increment_speed_counter)
void play_the_game()
{
LOCK_VARIABLE(speed_counter);
LOCK_FUNCTION(increment_speed_counter);
install_int_ex(increment_speed_counter, BPS_TO_TIMER(60));
while (!game_over) {
while (speed_counter > 0) {
update_game_logic();
speed_counter--;
}
update_display();
}
}
Añada una llamada a save_bitmap() en alguna parte del código. Lea en
la documentación de save_bitmap() una explicación de uno de los fallos
más comunes al usar la función, y un poco de código fuente.
Llame srandom(time(NULL)) al principio de su programa, y entonces use
random()%límite para obtener un número pseudo-aleatorio entre 0 y
límite-1.
No hay necesidad de hacerlo. El enlazador sólo incluye partes de la
biblioteca que realmente usa, por lo que si no llama ninguna de las
rutinas de mapeado de texturas o reproducción de FLICs, éstas no se
añadirán a su ejecutable. Esto no funciona perfectamente porque hay
mucho código de Allegro que usa tabla de punteros a funciones que
hacen que rutinas innecesarias se enlacen con tu código, por lo que la
mayoría de las funciones de gráficos serán incluidas en cada
ejecutable, pero he intentado reducir esto al mínimo. Mire allegro.txt
para más información sobre métodos precisos para quitar algunos
controladores de gráficos y sonido.
No. Creo que este tipo de soporte hardware sería mucho más util como
parte de un API 3D, cosa que Allegro no es (y nunca será). Si quiere
trabajar en esto, la biblioteca MESA (una implementación libre de
OpenGL) es en mi opinión el lugar a mirar.
No obstante, si está interesado en usar OpenGL para los gráficos y
Allegro para todo lo demas, puede probar varias librerías que extienden
Allegro enlazadas desde http://www.allegro.cc/, como AllegroGL.
Ya existen varias muy buenas actualmente, por ejemplo el paquete
JGMOD. Siga los enlaces de la página web de Allegro.cc
(http://www.allegro.cc/). No se le permite que sugiera que alguna
de las bibliotecas existentes sea incluída en Allegro, porque este tema
ha sido discutido hasta la muerte en la lista de correo y ya estamos
cansados de él.
Hay varios paquetes de soporte de red actualmente en desarrollo o
flotando por la red, y en nuestra opinión este tipo de código es más
útil como biblioteca externa que como parte de Allegro.
Unisys tiene la patente en el algoritmo de compresión LZW que es usado
en el formato GIF. Queremos que Allegro sea totalmente libre y sin
restricciones, lo que significa que no podemos incluir ningún código
que haya que licenciar o pagar por derechos de autor.
Quizás. Intente aislar el fragmento de código mas pequeño que es capaz
de reproducir el problema, y lo miraremos. Si puede mandarnos un
programa de 10 líneas, lo solucionaremos. Probablemente podríamos
solucionar uno de 100 líneas. 1000, y no tenemos posibilidad alguna :-)
Claro. Lea las condiciones giftware en readme.txt. No me importa lo
que haga con él, yno hay problemas con el uso comercial.
¡Cuando este acabado! Los ánimos son bienvenidos, pero no tenemos
fechas fijas de lanzamiento y no vamos a hacer una para usted. Tan
pronto como este hecho, será liberado.
Grabber puede importarlas directamente de ficheros .fnt con formato
GRX o BIOS, o puede dibujarlas usted en una imagen .pcx con cualquier
programa. Busque en la página de Allegro una utilidad (ttf2pcx) que
convierte fuentes Windows TrueType a formato .pcx.
En la página web de Allegro (http://alleg.sourceforge.net/) hay
algunos enlaces. Puede usar los patches de la Gravis (formato .pat), o
ficheros SoundFont 2.0 (.sf2), pero éstos últimos deberán ser
convertidos a un fichero patches.dat con la utilidad pat2dat.
Necesita la utilidad de conversión makertf
(http://www.giffer.com/public/win/pwflemgt/Files/MKRTF104.ZIP), y el compilador
de Ayuda Windows (ftp://ftp.microsoft.com/Softlib/MSLFILES/HC505.EXE).
Cree un directorio temporal, copie ahí el fichero allegro.txi del
directorio allegro/docs, y ejecute los comandos makertf --no-warn
allegro.txi -o allegro.rtf -J allegro.hpj seguido de hcp
allegro.hpj. El segundo comando dará muchos errores, pero pueden ser
ignorados con tranquilidad.
El fichero allegro.rtf puede ser leído directamente por Microsoft Word
e impreso desde ahí, pero debería pinchar con el botón derecho y
actualizar los cambos de la tabla de contenido e índice para que
primero sean rellenados con datos correctos. Alternativamente puede
instalar el pack TeX y usar los programas tex y dvips para contertir
allegro.txi en formato Postscript.
Mire la página web de Allegro.cc, http://www.allegro.cc/.
Si tiene algo que añadir a esto, ¡por favor, mándeme la URL!
Es la forma mas simple de actualizar su programa, en caso de que haya
que cambiar el valor de PI. Esto también hará su programa más portable
a otros compiladores que usen otros valores de PI.
Un número de tarjetas gráficas tienen versiones erróneas o incompletas
de la implementación VESA, y a menudo la función vsync() no está
implementada. Para ver ejemplos de dibujado sin parpadeos, mire el
código del juego demo, el cual usa varios métodos para dibujarse.
Si el código funciona sin optimizaciones, podría ser un fallo de su
compilador. Puede intentar forzar al compilador a hacer lo que desea
mediante el siguiente ejemplo:
while (!key[KEY_ENTER])
rest(0);
En este caso, no obstante, sería mejor usar
readkey() en su lugar.
O considerar actualizar o desactualizar su compilador.
Probablemente está declarando el uso de un dominio de nombres
(namespace) antes de incluir las cabeceras de Allegro. Por ejemplo:
#include <iostream>
using namespace std;
#include <allegro.h>
Mueva la declaración `using' después de las directivas `include' de
los ficheros de cabecera de Allegro:
#include <iostream>
#include <allegro.h>
using namespace std;
Mire en http://alleg.sourceforge.net/maillist.es.html.