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. Debería leer el
fichero readme.DJGPP contenido en el archivo gcc*b.zip (ya que al final
del mismo se indica cómo corregir el problema).
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 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
esta 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.
Personalmente no tengo acceso a NT, por lo que no hay nada que pueda
hacer por esto, y para ser sincero, no me importa mucho :-) Si quiere
ejecutar programas DOS, ¡use el 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 quiero que Allegro dependa de
otros paquetes de enlazado dinámico.
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. Esto se especifica con el parámetro '-tW'
para el compilador de línea de comando de Borland C++. O eso, o
#defina USE_CONSOLE al comienzo si necesita crear un programa de
consola.
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 Mingw32 o al final de la variable BCC32DIR si está usando BCC.
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. 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.
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.
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.
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 tópico ha sido discutido hasta la muerte en la lista de correo
y estoy cansado de él.
Eso sería un montón de trabajo, y no tengo tiempo para hacerlo. Hay
varios paquetes de soporte de red actualmente en desarrollo o flotando
por la red, y en mi 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. Quiero que Allegro sea totalmente libre y sin
restricciones, lo que significa que no puedo 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 mirare. Si puede mandarme un programa
de 10 líneas, lo solucionaré. Probablemente podría solucionar uno de
100 líneas. 1000, y no tengo ninguna oportunidad :-)
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 tengo fechas
fijas de lanzamiento y no voy a hacer una para usted. Tan pronto como
este hecho, será puesto al público.
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
(ftp://ftp.coast.net/Coast/win3/winhelp/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, http://alleg.sourceforge.net/.
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])
yield_timeslice();
En este caso, no obstante, sería mejor usar readkey() en su lugar.
O considerar actualizar o desactualizar su compilador.
Mire http://alleg.sourceforge.net/maillist.es.html.