Allegro Eine Bibliothek für Computer-Spiele-Programmierung Sprachen: English  español  français  한국어 (Hangul)  polski  Italiano 

 
 

Allegro
  Neuigkeiten
  Einführung
  Lizenz
  Mitwirkende
  Alte Neuigkeiten
  Logos

Downloads
  Neueste Version
  Alte Versionen
  CVS

Dokumentation 
  API
  FAQ
  Tutorials
  Die Zukunft

Unterstützung
  Hilfe
  Mailing Listen
  IRC

Spiele, Utilities, Libraries, etc
  Allegro.cc

Verschiedenes
  DIGMID
  Links
  Mirrors
  Webmasters
  Humor

 
 
  

Die Allegro FAQ (Häufig gestellte Fragen)
Falls die Antwort nicht hier ist, stellen Sie eine Frage, und sie wird hinzugefügt...


Inhalt


Allgemeine Fragen



Siehe readme.txt.



Von jedem SimTel Mirror, im Verzeichnis gnu/djgpp/v2tk/, oder von der Allegro Homepage, http://alleg.sourceforge.net/.



Siehe allegro.txt.


DJGPP Probleme



Make gehört zur Standard djgpp Distribution, und befindet sich in der Datei v2gnu/mak*b.zip (was auch immer gerade die aktuelle Version ist). Sie ist hier erhältlich: http://www.delorie.com/djgpp/.



Sind Sie sicher, dass djgpp richtig installiert ist? Lesen Sie die Anweisungen in der djgpp readme.1st Datei, und stellen Sie insbesonere sicher dass die DJGPP Umgebungsvariable gesetzt ist und sich das djgpp\bin Verzeichnis im Datei-Pfad befindet.



Sind Sie sicher, dass Sie das GNU make Programm verwendn, und nicht eine andere Version, z.B. die von Borland? Falls Zweifel bestehen, führen Sie "make -v" aus und überprüfen ob eine GNU Copyright Meldung erscheint.



Führe make nicht im Windows Explorer aus! Öffne eine DOS Box, ändere das Allegro Verzeichnis, und gib "make" in der Kommandozeile ein.



Es kann sein dass die Systemzeit abweicht oder falsch eingestellt ist. Außerdem besteht die Möglichkeit, dass Sie eine neue Datei installiert haben, die von jemandem in einer östlicheren Zeitzone erstellt wurde. In diesem Fall kann man entweder ein paar Stunden warten (oder die Uhr kurzfristig vorstellen), oder ein Utility wie "touch" verwenden um das Datum der Dateien zu verändern.



Wie die Fehlermeldung andeutet, benötigt der Compiler mehr Speicher. Das go32-v2 Programm teilt einem mit wie viel Speicher zur Zeit verfügbar ist. Unter DOS kann es helfen die Swap-Datei zu vergrößern. Unter win95, erhöhe den DPMI Speicher auf 65536 (muss manuell eingegeben werden, weil die Liste sonst mit 16384 aufhört).



Wie die Fehlermeldung andeutet, gibt es einen Konflikt zwischen gcc und einer älteren Version von libc. Eine Lösung ist am Ende der Datei readme.DJGPP enthalten, die man im DJGPP Archiv gcc*b.zip findet.



Fehlermeldung, wie:
C:\TEMP\ccdaaaaa(.text+0x9):x.c: undefined reference to `allegro_init'
C:\TEMP\ccdaaaaa(.text+0xe):x.c: undefined reference to `install_keyboard'

Man sollte immer die Dokumentation lesen :-) Programme müssen immer mit der Bibliothek, liballeg.a, gelinkt werden. Stellen Sie zuerst sicher, dass alles korrekt installiert wurde (make sollte das automatisch machen). Danach, falls Sie von der Kommandozeile oder mit einem makefile kompilieren, fügen Sie -lalleg an das Ende des gcc Kommandos, oder falls Sie Rhide benützten, öffnen Sie das Options/Libaries Menu, schreiben 'alleg' in das erste freie Feld, und achten darauf dass das Kontroll-Kästchen aktiviert ist.



Nein, leider nicht. Für Anfänger, liballeg.a ist ca. 1MB, aber man benötigt meist auch noch andere Programme, wie den Grabber, Sound Setup, etc. Nicht zu vergessen all die Beispielprogramme. Wären kompilierte Versionen aller Programme enthalten, käme eine Binärversion auf mehrere MB: viel zu groß! Ernsthaft, es gibt keinen Grund, Allegro nicht selbst zu kompilieren. Ein Compiler ist ein deterministischer Ablauf: Aus der selben Eingabe, und mit den gleichen Optionen, erhält man immer das selbe Ergebnis. Falls es nicht funktioniert, sind entweder die Eingabe-Dateien falsch (d.h. es stimmt etwas nicht mit der Allegro-Installation), oder es wird eine falsche Kommandozeile verwendet (sollte nicht vorkommen, da alles was man tun muss ist "make" einzugeben...) oder mit dem Compiler ist etwas nicht in Ordnung, d.h. er ist nicht richtig installiert. Finden und beheben das Problem, anstatt es unter den Teppich zu kehren indem Sie jemand anderen dazu bringen für Sie zu kompilieren...



GNU Programme schreiben ihre Fehlermeldungen in den Error-Stream, stderr. Leider kann command.com diesen nicht umleiten. Aber glücklicherweise hatte DJ den schlauen Einfall das zu umgehen, und man kann sein redir Programm verwenden um die Ausgabemeldungen in eine Datei zu leiten, z.B. "redir -eo make > logfile.txt".


DOS problems



Hier gibt es unterschiedliche Erfahrungen. Einige Leute haben von Problemen berichtet, während andere sagen es funktioniert. Ich selbst habe keinen Zugang zu NT, also kann ich keine Seite bestätigen, und ehrlich gesagt, interessiert es mich auch nicht sonderlich. Wenn Sie Windows-Programme wollen, benutzen Sie die Windows-Version. Wenn Sie DOS-Programme ausführen willst, benutzen Sie DOS!



Ja, aber mit Einschränkungen. Wenn Sie die OpenDOS Version von EMM386 benützten, müssen Sie deren DPMI Implementierung ausschalten (DPMI=OFF in der EMM386.EXE Zeile in der config.sys). Gehen Sie außerdem sicher, dass die PIC=OFF Option gesetzt ist, aber das ist die Default-Einstellung, es sollte also kein Problem darstellen).



Es geht nicht. Dieses Limit kommt von der VGA Hardware, nicht von Allegro. Um auf mehr Speicher zuzugreifen, muss man einen SVGA Modus benutzen, d.h. entweder eine höhere Auflösung verwenden, oder den SciTech Display Doctor, der mehrere SVGA Modi mit niedriger Auflösung unterstützt.



Es funktioniert bei einigen, bei anderen nicht. Das Problem ist dass sich Creative Labs weigert, technische Details zu veröffentlichen, was zur Folge hat, dass wir nicht wissen, wie wir Treiber für sie schreiben sollen. Beschwer dich bei ihnen, oder kaufe eine andere Karte von einem vernünftigeren Hersteller.



Der Grund kann sein, dass die Lautstärke sehr leise gestellt ist: Versuche sie im Setup-Programm einzustellen. Außerdem mixt Allegro mehrere Sounds in einen einzigen Ausgabe-Buffer, während der Windows Sound-Player immer nur ein Sample gleichzeitig abspielt. Das hat zur Folge, dass jeder Sound nur einen kleineren Prozentsatz des Gesamtvolumens erhält. Das ist ganz einfach der Preis den man für mehrere Ausgabekanäle zahlen muss. Wer das nicht will, kann (im Setup-Programm) die Anzahl der Sound-Kanäle ändern: Es kann eine beliebige Potenz von zwei sein, kleiner oder gleich 64. Je kleiner, desto lauter ist der Sound. Eine Alternative ist die set_volume_per_voice() - Funktion, die in der Dokumentation beschrieben wird. Sie ermöglicht es, das Gesamt-Volumen von Allegros digitaler Soundausgabe anzupassen.



Probier' den FreeBE/AF Treiber (http://www.talula.demon.co.uk/freebe/), oder den kommerziellen SciTech Display Doctor (http://www.scitechsoft.com). Sollte es immer noch nicht funktionieren, sende eine Beschreibung des Problems an die Allegro Mailing-Liste, zusammen mit einer Kopie der Ausgabe der afinfo und vesainfo Programme.



Das VBE/AF Interface tut das sogar, für die Video-Treiber: siehe das FreeBE/AF Projekt auf http://www.talula.demon.co.uk/freebe/. Für mehr generelle Dinge wie Sound, VESA, und mode-X Routinen, wäre es aber sehr kompliziert das umzusetzen, weil die Treiber von einer Reihe von Helfer-Funktionen in der Haupt-Bibliothek abhängen. Das DJGPP DXE-Format ist bei weitem nicht flexibel genug um das zu unterstützen, und ich will Allegro nicht von anderen dynamischen Link Paketen abhängig machen.



Tja, wie es aussieht, müssen Sie die Größe des Umgebungsspeichers erhöhen :-) Am einfachsten geht das in den DOS-Box Einstellungen (Klicken Sie auf das Systemmenu und wählen "Eigenschaften"), oder in der config.sys Datei (z.B. "shell=c:\command.com /e:8192").


Windows Probleme



Sie müssen Ihrem Compiler sagen wie er die DirectX Include und Bibliothek Dateien finden kann: nehmen Sie die DirectX SDK /include und /lib Verzeichnisse in den Compiler/Linker Pfad auf. Alternativ, falls die Konfiguration nicht veränderr werden soll, kann man auch die Dateien aus den DirectX SDK /include und /lib Verzeichnissen in die entsprechenden Verzeichnisse des Compilers kopieren.



Eine neuere Version des DirectX SDK wird benötigt, mindestens Version 5. Sie ist auf der Microsoft Entwickler Seite erhältlich.



Setze END_OF_MAIN() an das Ende deiner main() Funktion. Allegro benutzt dieses Makro, um die normale main() Funktion mit etwas Präprozessor-Magie in eine WinMain() Funktion im Window-Stil umzuwandeln.



Versichern Sie sich, dass sie eine Windows GUI Applikation erstellen, und nicht eine Konsole Applikation. Es gibt eine entsprechende Einstellung in MSVC oder dem Borland C++ Builder. Beim Borland C++ Kommandozeilencompiler ist es das '-tW' Flag. Eine andere Möglichkeit besteht darin, das Präprozessorsymbol ALLEGRO_USE_CONSOLE vor den Allegro Includes zu definieren, falls wirklich eine Konsole für das Programm benötigt wird.



Tja, wie es aussieht, müssen Sie die Größe des Umgebungsspeichers erhöhen :-) Am einfachsten geht das in den DOS-Box Einstellungen (Klicken Sie auf das Systemmenu und wählen "Eigenschaften"), oder in der config.sys Datei (z.B. "shell=c:\command.com /e:8192").



Versichern Sie sich, dass sie kein Semikolon an Ihre MSVCDIR Variable angrhängt haben, falls Sie MSVC verwenden, oder an Ihre MINGDIR Variable, falls Sie Mingw32 verwenden, oder an Ihre BCC32DIR Variable, falls Sie BCC verwenden.


Im Fenster-Modus bleiben Grafikreste auf dem Desktop zurück, wenn das Fenster verschoben wird, oder ein anderes Fenster darüber bewegt wird.

Schalten Sie bitte "direct updating" für den DirectX Fenster-Treiber aus, indem sie die entsprechende Konfigurationsvariable verwenden. Die Sektion "Konfigurationsroutinen" in der Dokumentation enthält Informationen über das Format, sowie die allegro.cfg Template-Datei.


Im Fenster-Modus bleibt der Bildschirm schwarz, bis das Fenster unter ein anderes Fenster auf dem Desktop plaziert wird.

Schalten Sie bitte "direct updating" für den DirectX Fenster-Treiber aus, indem sie die entsprechende Konfigurationsvariable verwenden. Die Sektion "Konfigurationsroutinen" in der Dokumentation enthält Informationen über das Format, sowie die allegro.cfg Template-Datei.


Unix Probleme



Füge END_OF_MAIN() nach deiner main()-Funktion ein. Allegro benutzt dieses Makro, um mit etwas Präprozessor-Magie an eine Kopie der argv[] Parameter zu kommen (diese werden für verschiedene interne Dinge benötigt).



Sie verwenden verutlich ein Darwin/MaxOS X System. Falls das der Fall ist, versichern Sie sich dass das Symbol USE_CONSOLE in Ihrem Programm nich verwendet wird: Es ist ein veraltetes Symbol das mit ALLEGRO_USE_CONSOLE ersetzt wurde. Seien Sie sich außerdem darüber im Klaren, dass das "magic main" auf so einem System nicht ersetzt werden kann: Es ist ganz einfach nicht möglich, ALLEGRO_NO_MAGIC_MAIN zu verwenden wenn man mit Allegro linken will.



Um die Fehlermeldungen später lesen zu können, muss stderr in eine Datei umgeleitet werden. Die exakte Methode dafür ist je nach verwendeter Shell unterschiedlich: In einer Bourne-style Shell (wie bash), funktioniert z.B. "make 2> logfile.txt".


Wenn ich versuche DGA2 zu verwenden, erhalte ich die Meldung "resolution not supported", aber der X Server unterstützt die selbe Auflösung!

Es gibt zwei mögliche Erklärungen: 1) DGA2 kann theoretisch andere Auflösungen/Farbtiefen unterstützen als X, das gfxinfo Programm sollte Aufschluss darüber geben, welche Möglichkeiten existieren. 2) Die DGA2 Implementation könnte fehlerhaft sein, siehe nächste Frage.



Sie verwenden vermutlich einen XFree86 Server mit einer sehr fehlerhaften DGA2 Implementation, wie z.B. 4.0.3 (kommt z.B. mit Red Hat 7.1). Installation der Version 4.1.0 sollte das Problem beheben. Sie ist erhältlich von ftp://ftp.xfree86.org/pub/XFree86/4.1.0/binaries/. Wählen Sie das Verzeichnis für Ihre Plattform, und folgen den Anweisungen in der Install Datei.


Generelle Probleme



Der Grabber muss mit dem Code in datedit.c gelinkt werden. Aber es sollte gar nicht notwendig sein, sich darüber Gedanken zu machen: "make" sollte das alles automatisch erstellen.


Wenn ich Allegro kompiliere, versagt make mit einer Meldung wie `Error: operands given don't match any known 386 instruction' oder `Error: no such instruction `maskmovq %mm3, %mm1''.

Eine neuere Version der GNU Binutils wird benötigt. Lesen Sie readme.txt um herauszufinden, was die mindestens benötigte Version ist.



Nicht solange <x-beliebig> nicht in readme.txt als eine der unterstützten Plattformen erwähnt wird. Sie können versuchen, Allegro zu portieren, aber das ist meinst ziemlich viel Arbeit. Sollte <x-beliebig> ein 16-Bit Compiler wie der alte Borland C sein, vergessen Sie die Idee ganz einfach :-)



WIP steht für "work in progress" (in Arbeit), und bezieht sich auf Veränderungen gegenüber der letzten offiziellen Version. WIP Versionen der Bibliothek können von der Allegro Homepage bezogen werden (http://alleg.sourceforge.net/), und sind für gewöhnlich sehr stabil, aber nicht so lange getestet wie End-Versionen.



Um einen Patch anzuwenden, wird das patch Programm benötigt. Für DJGPP sollte es vom selben Ort als die anderen Pakete erhältlich sein - es ist ein Standard GNU-Tool. Falls das Programm nicht funktioniert, überprüfen Sie, ob Sie den Patch über eine unmodifizierte Allegro-Kopie (mit der Version von der der Patch upgraden soll) installieren.



Diese Datei ist für die WIP Versionen separat erhältlich. Sie ist hier: http://alleg.sourceforge.net/wip.html. (alldata.zip)


Wie kann ich mehrere verschiedene Bilder gleichzeitig darstellen? Wenn ich das zweite darstellen will verändert das die Palette für das erste.

Das ist ganz einfach die Weise in der die Video-Hardware funktioniert: Es kann zu einem Zeitpunkt immer nur eine Palette aktiv sein. Entweder wandle alle Bilder um, so dass sie die selbe Palette verwenden, oder benutze einen Truecolor Graphikmodus.



Auf der Allegro.cc Homepage (http://www.allegro.cc/) sollten entsprechende Tools zu finden sein, z.B. Fixpal oder Smacker.



Die VGA-Hardware benutzt nur 6 Bits pro Farb-Komponente, was bedeutet das die Rot-, Grün- und Blauanteile in der Palette-Struktur nur Werte zwischen 0 und 63, und nicht zwischen 0 und 255 annehmen können. Das bedeutet das 2^18 = 262144 verschiedene Farben möglich sind, bzw. 64 Graustufen. Mit der VESA-Funktion 0x40F8 ist es zwar möglich einen 8 Bit breiten DAC einzustellen, aber Allegro unterstützt das nicht direkt, und ich bin mir nicht sicher wie kompatibel das auf verschiedener Hardware laufen würde.



Im 256 Farben Modus benutzt die VGA-Hardware Index #0 für den Rand. (In Truocolor-Modi schwarz). Der bunte Rand kann vermieden werden indem man in der Palette Index #0 auf schwarz setzt.



Nur schwer :-) Es gibt keinen so einfachen Trick wie einfach die Palette ändern, deshalb muss das Bild wiederholt neu gezeichnet werden. (heller oder dunkler) Man könnte auch wiederholt halb transparente Rechtecke über den Bildschirm zeichnen, oder draw_lit_sprite() verwenden, aber eine Warnung: Diese Operationen sind sehr CPU intensiv und benötigen einen schnellen PC.



fade_in() und fade_out() funktionieren nur in 8-Bit Palette Modi. Eine Möglichkeit ein Bitmap einzublenden ist jeden einzelnen Bildpunkt in einem Loop zu ändern. Eine alternative ist es transparente Rechtecke über den Bildschirm zu zeichnen. Diese Methoden können aber ziemlich langsam sein. Das Beispiel exxfade.c demonstriert wie man zwischen zwei Bitmaps umblenden kann. Man kann es leicht modifizieren sodass es von/zu einem schwarzen Bildschirm umblendet. Siehe auch die vorherige Frage.



Schau auf die Allegro-Homepage (http://alleg.sourceforge.net/), dort sollten einige Utilities zu finden sein, z.B. DTA und Smacker.


Wie kann ich im Truecolormodus Teile eines Sprites transparent machen? Ich verstehe nicht was die Dokumentation mit "bright pink" meint...


Starte dein Zeichenprogramm, und stelle in der RGB Farbauswahl Rot und Blau auf das Maximum (normalerweise 255, aber das hängt von den verwendeten Einheiten ab), und Grün auf das Minimum. Das Ergebnis sollte ein spezieller Farbton "Magic Pink" sein, oder wie es manche nennen, Magenta.



Denken Sie daran, dass die Vertex Positionen (in der Fixed Point Version) im Fixed Point Format angegeben werden. Man kann sie mit dem itofix() Makro konvertieren, oder die Koordinaten um 16 Bit nach links shiften.



Denke daran dass der Rotationswinkel im Fixed-Point-Format angegeben wird, und man deshalb das itofix() Makro verwenden muss oder die Koordinaten 16 Bits nach links shiften. z.B. rotate_sprite(bmp, spr, x, y, itofix(32)) rotiert den Sprite um 45 Grad.



Sie versuchen vermutlich, die Dialog-Struktur mit einem Pointer auf ein Bitmap zu initialisieren, richtig? Das geht nicht, weil der Dialog zur Übersetzungszeit des Compilers erzeugt wird, das Bitmap aber erst zur Laufzeit geladen wird und der Compiler deshalb noch nicht weiß, wo es sein wird. Fügen Sie einen Null-Pointer in die Dialog-Struktur ein, und kopiere den wirklichen Bitmap-Pointer als Teil des Programminitialisierungscodes in das dp-Feld, nachdem das Bitmap in den Speicher geladen wurde.



Das hänge davon ab, was genau Sie tun wollen. Wenn die Bilder komplett gefüllt sind, gibt es keinen Vorteil für RLE-Sprites, und es ist wahrscheinlich schneller, ein reguläres Bitmap mit der blit()-Funktion zu verwenden. Falls die Grafik viele transparente Bereiche enthält, ist ein RLE-Sprite fast immer kleiner und schneller als draw_sprite(). Kompilierte Sprites sind normalerweise um einiges schneller als beide anderen Methoden für maskierte Sprites, und geringfügig schneller für deckende Graphiken, aber das ist sehr unterschiedlich. Sie sind am nützlichsten für kleine Sprites, auf alten Maschinen, und im Mode-X. Für SVGA-Modes auf einem Pentium kann es leicht sein, dass blit() schneller ist (die Größe der kompilierten Sprites ist sehr schlecht für die Cache-Performance).



Sie müssen sicherstellen, dass die Update-Rate der Game-Logik konstant ist. Screen-Refreshes müssen dazu auf zu langsamen Computern übersprungen werden, damit sie nicht zurückfallen. Das kann mit Hilfe eines Timers implementiert werden, der eine globale Variable gemäß der Logik-Rate erhöht. z.B.

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



Mit save_bitmap(). Lies die save_bitmap() Dokumentation, sie beschreibt einen oft gemachten Fehler, und hat auch Beispielcode.



Rufe srand(time(NULL)) am Programmstart auf, und benutze dann rand()%limit um eine Pseudo-Zufallszahl zwischen 0 und limit-1 zu erhalten.


Warum nicht eine "light" Version von Allegro herausgeben? Ich brauche keine der Sound, Mathematik, oder GUI Routinen...

Das ist nicht notwendig. Der Linker sollte nur die benötigten Teile der Bibliothek einbeziehen, wenn also z.B. keine, sagen wir, Texture-Mapping oder FLIC Funktionen aufgerufen werden, werden sie auch nicht in die ausführbare Datei aufgenommen. Das funktioniert nicht perfekt, weil ein großer Teil von Allegro mit Listen von Funktionszeigern arbeitet, wodurch ein Großteil der Grafik-Funktionen in die ausführbare Datei mitaufgenommen wird - aber ich dabei versucht, das auf ein Minimum zu begrenzen. Siehe allegro.txt für genauere Informationen wie man Teile der Graphik- und Soundtreiber entfernen kann.



Nein. Diese Art von Hardware-Unterstützung wäre nützlich als Teil eines 3D-API, was Allegro nicht ist, und nie sein wird. Falls Sie sich in dieser Richtung betätigen wollen, wäre meiner Meinung nach die MESA Bibliothek (eine OpenGL-Implementation) ein guter Ausgangspunkt.



Es gibt bereits sehr gute Tools dafür, z.B. das JGMOD Paket. Siehe die Links auf der Allegro Webseite (http://alleg.sourceforge.net/). Es ist untersagt vorzuschlagen eine dieser Bibliotheken in Allegro zu integrieren, denn dieses Thema wurde bereits auf der Allegro Mailing-Liste zu Tode diskutiert - und ich bin es leid.



Das wäre sehr viel Arbeit, und ich habe nicht die Zeit es selber zu machen. Es gibt bereits einige Netzwerk-Pakete, die sich in Entwicklung befinden oder im Internet erhältlich sind, und meiner Meinung nach ist diese Art Code ohnehin besser als Addon Bibliothek geeignet.



Unisys hat ein Patent auf den LZW Kompressions-Algorithmus, der im GIF Format verwendet wird. Ich möchte, dass alles in Allegro frei benutzbar bleibt, ohne irgendwelche Einschränkungen, und das bedeutet dass kein Code integriert werden kann der einer Lizenz oder Gebühren unterliegt.



Es ist nicht auszuschließen. Versuchen Sie, das kleinste Codefragment zu isolieren, mit dem das Problem reproduziert werden kann, und ich werde es mir anschauen. Wenn Sie mir ein 10 Zeilen Programm senden, repariere ich es. 100 Zeilen, und ich kann es vielleicht. 1000 Zeilen, und ich habe keine Chance :-)



Sicher. Lesen Sie die Giftware Lizenz in readme.txt. Mir ist es egal, was Sie damit machen, und es gibt keine Probleme mit einem kommerziellen Einsatz.



Wann immer es fertig ist! Eine kleine Ermunterung ist immer willkommen, aber ich habe keine fixen Termine, und ich werde keine für dich machen :-) Sobald es fertig ist, wird es herauskommen.



Der Grabber kann direkt aus GRX oder Bios .fnt-Dateien importieren, oder man man kann sie mit einem beliebigen Zeichenprogramm in ein .pcx Bild zeichnen. Auf http://www.talula.demon.co.uk/ttf2pcx/ gibt es ein Utility, das Windows TrueType-Fonts in dieses .pcx Format konvertiert.



Auf die Allegro Homepage (http://alleg.sourceforge.net/) sind einige Links. Man kann Gravis Patches (.pat Format) benutzen, oder SoundFont 2.0 (.sf2) Dateien, aber letztere müssen erst mit dem pat2dat Utility in eine patches.dat Datei konvertiert werden.



Sie benötigen das makertf Utility (ftp://ftp.coast.net/Coast/win3/winhelp/mkrtf104.zip), und den Windows Help Compiler (ftp://ftp.microsoft.com/Softlib/MSLFILES/HC505.EXE). Erstellen Sie eine temporäres Verzeichnis, kopiere die allegro.txi Datei aus dem allegro/docs Verzeichnis, und führe die folgenden Kommandos aus: "makertf --no-warn allegro.txi -o allegro.rtf -J allegro.hpj" gefolgt von "hcp allegro.hpj". Letzteres wird einige Fehlenmeldungen ausgeben, aber sie können ganz einfach ignoriert werden.



Die allegro.rtf Datei kann von Microsoft Word gelesen und von dort gedruckt werden, aber man sollte zuvor die Index-Felder mit einem Rechts-Klick aktualisieren. Man kann auch ein TeX Paket installieren und mit den tex und dvi Programmen allegro.txi in das Postscript Format umwandeln.



Schauen Sie auf der Allegro-Homepage nach: http://alleg.sourceforge.net/. Wenn Sie noch irgendetwas wissen, was man hinzufügen könnte, senden Sie mir bitte die URL!


Warum wird es als eine gute Idee angesehen, PI als eine Konstante zu definieren, anstatt direkt 3.141592 im Quellcode zu verwenden?

Es vereinfacht die Wartung des Programms (Falls der Wert von PI je geändert werden müsste). Es macht das Programm u.U. auch portierbarer.



Eine Reihe von Graphikkarten haben fehlerhafte oder unvollständige VESA Implementierungen, und oft ist die vsync() Funktion nicht implementiert. Für Beispiele wie man flimmerfreie Animationen darstellt lohnt sich ein Blick auf das Demo-Spiel, das verschiedene Methoden verwendet.


Warum funktioniert "busy waiting" mit dem key array nicht? z.B. "while (!key[KEY_ENTER]);" funktioniert nicht.

Wenn der Code ohne Optimierunge läuft, dann könnte es ein Compiler-Fehler sein. Sie könnten versuchen den Compiler zum Nachgeben zu zwingen, z.B:

      while (!key[KEY_ENTER])
         yield_timeslice();
In diesem speziellen Fall wäre as aber ohnehin besser readkey() zu verwenden. Überlege auch, deinen Compiler up- oder downzugraden.



Hier: http://alleg.sourceforge.net/maillist.html.