Fear2D

Fear2D ist eine auf OpenGL basierende Engine für 2D-Grafik. Sie wird von F34r0fTh3D4rk entwickelt und hier vorgestellt.

Da in der offiziellen Version noch einige Sachen fehlten (vor allem Text), habe ich eine weiter entwickelte Version der Engine gemacht.

Download

Zip-Archiv

Demos

Initialisierung

Fear2D ist sehr einfach zu handhaben. Alles was man braucht sind ein paar Zeilen Code.

Zuerst brauchen wir die Units. Für ganz grundlegende Funktionen ist das nur

uses ..., F2d_Core, ...;

So, dann noch ein Objekt für die Engine:

type
  TForm1 = class(TForm)
  {...}
  private
    { Private-Deklarationen }
    Engine:TEngine;
  end;

Dies wird im OnCreate erzeugt und an das Form gebunden:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Engine:= TEngine.Create(false);
  Engine.Init(self);
  {...}

Nun noch das Zeichen-Ereignis, zum Beispiel ein Timer mit sehr geringen Intervall (man sieht auch, dass die Frames Pro Sekunde als Variable zur Verfügung steht):

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Engine.DoBegin;
    Caption:= Engine.FPS;
  Engine.DoEnd;
end;

Das war schon alles. Ich sag ja, Fear2D ist einfach zu nutzen!

Text-Ausgabe

Dieses Tutorial beschreibt, wie man mit F2D Text ausgibt. Zip zur Demo

Die Engine wird logischerweise so initialisiert wie immer, aber es kommt nochwas dazu.
Der Code hier ist auch im OnCreate-Ereignis.

Engine.FontManager.AddFont('myfont','arial',60,[fsItalic]);

Nun, was tut dieser Code? Dazu eins: die Engine muss alles, was sie später verwenden soll, vorher kennen. Das gilt für Sounds, Texturen und eben auch Fonts. Dieser Code hier sagt dem FontManager der Engine, dass er sich den Font ‚Arial‘ mit der Schriftgröße 60 in Kursiv(Italic) merken soll, und zwar mit dem Namen ‚myfont‘. Dieser Name dient dazu, den Font später wiederzuerkennen.
Statt Eigenschaften des Fonts anzugeben, kann man auch ein TFont-Objekt übergeben.

Um den Text anzeigen zu können, kommt in die Zeichen-Routine etwas Inhalt. Hier wird ein Text horizontal (das erste true) und vertikal (das 2. true) zentriert ausgegeben:

Engine.DoBegin;
  // Font binden...
  Engine.FontManager.BindFont('myfont',clRed);
  // ...und schreiben (einzeilig)
  Engine.TextOut(fx,fy,TheText,true,true);
Engine.DoEnd;

Nun kann man mit dieser Routine nur einzeiligen Text ausgeben. Wer was anderes versucht, wird sich an schönen Kästchen erfreuen können 😉 Da dies aber nicht das ist, was wir wollen, gibts einen Ausweg:

Engine.DoBegin;
  // Font binden...
  Engine.FontManager.BindFont('small',clBlue);
  // ...und schreiben (mehrzeilig)
  Engine.TextOutMultiline(10,50,'FPS: '+FloatToStrF(Engine.FPS,ffFixed,15,2)+#13+
                                #13+
                                'Keys:'+#13+
                                ' Esc  - Exit');
Engine.DoEnd;

Hierbei ist zu beachten, dass die Zeilen mit #13 getrennt werden, #10 führt hier zu „Klötzchenbildung“.

Wenn man die Farbe wechseln möchte, bindet man einfach den gleichen Font nochmal. Die Engine erkennt dies und ändert nur die Farbe.

// Font binden...
Engine.FontManager.BindFont('small',clBlue);
// ...und schreiben
Engine.TextOut(10,50,FloatToStr(Engine.FPS));
// Farbe wechseln
Engine.FontManager.BindFont('small',clGreen);
// ...und schreiben (einzeilig, horizontal zentriert)
Engine.TextOut(Engine.Width / 2,50,'FEAR2D Demo,  (c) Martok',true);