Delphi-PRAXiS
Seite 52 von 103   « Erste     242505152 535462102     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Andorra 2D [Ver. 0.4.5.1, 31.12.08] (https://www.delphipraxis.net/81314-andorra-2d-%5Bver-0-4-5-1-31-12-08%5D.html)

igel457 5. Mär 2008 16:24

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Bei uns in der Schule läuft Andorra 2D super mit dem OpenGL-Plugin. Das ist meistens weniger anspruchsvoll in Punkto Grafikkarte.

Looper 5. Mär 2008 18:38

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Dann versuche ich es nächsten Mittwoch nochmal mit dem OpenGL PlugIn. Funktioniert damit jetzt auch der Fullscreen?

DelphiNub 11. Mär 2008 10:33

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Moinsen
Erstmal großes Lob an Andreas für seine 2d Engine :cheers:

Aber.. ich hab da ma n Problemchen:

Ich hab mir eine funktion geschrieben um text mittig auszugeben:

Delphi-Quellcode:
procedure TextOutCentered( AdDraw: TAdDraw; s: string; x, y: integer );
var
  w, h: integer;
begin
  with AdDraw.Canvas do begin
    w:= Font.TextWidth( s );
    h:= Font.TextHeight( s );
    TextOut( x - (w div 2), y - (h div 2), s );
  end;
end;
Nun habe ich das Problem, das TextWidth und TextHeight 0 zurückgeben :(

Ich benutze Version 0.35 und benutzt werden:
Delphi-Quellcode:
  AdDraw.Fonts.GenerateFont('Verdana',50,[afBold]);
  AdDraw.Fonts.GenerateFont('Arial',24,[]);

igel457 11. Mär 2008 12:46

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Hallo,

Danke für das Aufspüren des Fehlers. Dieser befindet sich in der Unit "AdFont" und lässt sich durch austauschen der Methode "TAdFont.CalcTextSizes" durch folgende beheben:
Delphi-Quellcode:
procedure TAdFont.CalcTextSizes(AText:string);
var
  ATextSet:TAdTextSet;
begin
  if (TypeSetter.Changed) or (AText <> FLastText) then
  begin
    TypeSetter.CharSizes := FCharSizes;
    TypeSetter.CharPatterns := FCharPatterns;
    TypeSetter.GenerateLine(0, 0, AText, ATextSet);
    FLastText := AText;
    FLastWidth := TypeSetter.TextWidth;
    FLastHeight := TypeSetter.TextHeight;
  end;
end;
Falls es noch Probleme geben sollte, melde dich einfach.

Noch einmal Danke,
Andreas

DelphiNub 11. Mär 2008 14:26

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Ja sehr schön! Nun funktionierts :D

Ich hätte da noch was ^^

Also.. Seit 0.35 gibs ja dieses schöne Framework und den EventHandler, ich hatte vor die Events KeyDown und KeyUp zu verwenden, wenn ich nun aber diese so erstelle wie sie eigentlich angegeben sind bekomme ich den Fehler: "Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'"

Delphi-Quellcode:
// Zuweisung
AdDraw.Window.Events.OnKeyDown:= KeyDown;

// KeyDown Prozedur (Teil der Klasse der Anwendung)
procedure KeyDown(Sender: TObject; var Key: Word; Shift: TAdShiftState);
Wenn ich die Maus über OnKeyDown halte zeigt mir Delphi "Shift" als "AdWindowFramework.TAdEventHandler.$$" an

igel457 11. Mär 2008 14:30

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Hallo,

mach mal das "var" Weg:

Delphi-Quellcode:
TAdKeyEvent = procedure(Sender: TObject; Key: Word; Shift: TAdShiftState) of object;

DelphiNub 11. Mär 2008 14:54

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
:duck:

Ok meine Schuld.
Wenn wir schon grad dabei sind, wann empfielt es sich das Canvas.Release auszuführen? Einmal global per Render Durchlauf oder jedesmal wenn man etwas gezeichnet hat?
Weil ich such mir grad nen Ast.. Sobald ich etwas über die TAdImageList zeichne bringt mir irgendwas die Farbe meines Textes durcheinander..

Ich such mal weiter :coder:

igel457 11. Mär 2008 15:17

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Release solltes du immer nach einer "logischen Zeicheneinheit" aufrufen. Wenn du zum Beispiel ein Haus und einen Baum mit dem Canvas Zeichnest, dann wäre es angebracht "Release" nach dem Zeichnen des Hauses und nach dem Zeichnen des Baumes aufzurufen.

Release macht eigentlich nichts anderes, als die Zeichenoperationen, welche du ausgeführt hast, nun wirklich zu zeichnen.

DelphiNub 11. Mär 2008 15:29

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Okelidokeli ^^

*blödsinnigen text entfern*

Edit:
Oha! Auf die schnelle ist mir da noch was aufgefallen:

Delphi-Quellcode:
with AdDraw.Canvas do begin
  Pen.Width:= 3;
  MoveTo( 10, 10 );
  LineTo( 50, 10 );
  Pen.Width:= 1;
  Release;
end;
Zeichnet die Linie 1px breit

Delphi-Quellcode:
with AdDraw.Canvas do begin
  Pen.Width:= 3;
  MoveTo( 10, 10 );
  LineTo( 50, 10 );
  Release;
  Pen.Width:= 1;
end;
Zeichnet die Linie wie gewünscht 3px breit

Wäre evtl. eleganter wenn die Linienbreite mit zwischengespeichert werden würde :P

Edit:
Also das "Problem" mit der Farbe von Text hat sich "erledigt"
Ich hab bisher immer
Delphi-Quellcode:
AdDraw.Canvas.Pen.Color:= Ad_RGB( 255, 255, 255 );
AdDraw.Canvas.TextOut( 10, 10, 'blah' );
verwendet. Allerdings treten hin und wieder Probleme auf (eines davon ist das bei Ad_ARGB der Alpha wert nicht übernommen wird, der text ist dann nicht sichtbar).
Nun verwende ich
Delphi-Quellcode:
AdDraw.Canvas.Font.Color:= Ad_RGB( 255, 255, 255 );
AdDraw.Canvas.Font.TextOut( 10, 10, 'blah' );
Und es wird alles exakt so angezeigt wie es sein soll.

Eventuell hatte ich das falsch verstanden oder ich hab gerade ein Bug gefunden :freak:

Mal kurz zu meinem "Projekt":
Ich bastel aus Andorra 2D, FMod und Lua eine Art Sandbox-Engine (Kleine Anlehnung an Garrysmod, falls es jemand kennt).
Die Probleme traten auf als ich ein eigenes GUI erstellt hatte (Startmenü, Konsole, etc).

Ich warte schon sehnlichst darauf das 3D modelle (zB .OBJ) unterstützt werden :mrgreen:

igel457 13. Mär 2008 13:08

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich schaue mir das mit der Fontfarbe noch einmal an.

Wenn es noch weitere Probleme mit Andorra 2D gibt, dann weißt du ja, an wen du dich wenden musst ;-). Mache das nächste mal aber besser einen eigenen Thread in der Multimediasparte des Forums auf (du kannst ja einfach "[Andorra 2D]" vor den Threadtitel schreiben), sonst wird dieser Thread zu unübersichtlich (er ist zwar schon unübersichtlich, aber naja...).

Ich arbeite gerade an Multisurfaceunterstüzung. Wer aufmerksam die Roadmap gelesen hat, wird jedoch gemerkt haben, das dieses Feature erst für eine spätere Version geplant war. Der Hintergrund der Implementierung ist jedoch folgender: Ich möchte die pixelgenaue Kollision über den Stencilbuffer Hardwarebeschleunigen, da meine aktuelle Implementation des Pixelchecks noch sehr Fehlerbehaftet und langsam ist (auch wenn ich "Bitmaps" dafür verwende).
Als Abstrahierung für den Stencilbuffer ist mir ein Surfacesystem am intelligentesten vorgekommen. Im Anhang befindet sich ein Screenshot meiner aktuellen Surface Testanwendung (momentan noch ohne Stencilbuffer).

Der Code dafür sieht folgendermaßen aus - einfacher geht es eigentlich nicht:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
[...]
      AdSurface := TAdTextureSurface.Create(AdDraw);
      AdSurface.SetSize(256, 256);
[...]
end;

procedure TForm1.Idle(Sender: TObject; var Done: boolean);
begin
  if AdDraw.CanDraw then
  begin
    AdPerCounter.Calculate;

    AdDraw.ClearSurface(clGreen);
    AdDraw.BeginScene;

    with AdSurface.Canvas do
    begin
      Pen.Style := apNone;
      Brush.Color := Ad_ARGB(255, 128, 0, 64);
      Brush.GradientColor := Ad_ARGB(255, 255, 0, 255);
      Rectangle(0,0,256,256);
      Release;

      AdImage.Draw(AdSurface, 192,192,0);

      Font := AdDraw.Fonts.GenerateFont('Comic Sans MS',10,[],clBlack,255,2,2);

      with TAdSimpleTypeSetter(Font.TypeSetter) do
      begin
        DrawMode := [dtWordWrap, dtMiddle, dtCenter];
      end;

      Font.TextOut(AdRect(0,0,256,256),
        'Dies [...] realisierbar.');
    end;

    with AdDraw.Canvas do
    begin
      Pen.Style := apNone;
      Brush.Texture := AdImage.Texture.Texture;
      Brush.TextureMode := tmTile;
      Rectangle(0,0,ClientWidth,ClientHeight);
      Release;

      TextOut(0,0, 'FPS: '+IntToStr(AdPerCounter.FPS));
    end;

    AdSurface.Image.Draw(AdDraw, mx, my, 0);

    AdDraw.EndScene;
    AdDraw.Flip;
  end;
  Done := false;
end;
Ich hoffe das Feature kann jemand gebrauchen.

Features die bis jetzt für die nächste Version (0.4.0) geplant sind:
- Surfacesystem [fast fertig]
- Neues Renderstatesystem [angefangen]
- Hardwarebeschleunigte 2D-Kollisionskontrolle [0%]
- Neuimplementierung des Partikelsystems (verwendung von Pointsprites und Multithreading) [0%]
- Neuimplementierung des Lichtsystems [0%]

In Version 0.4.5 wird es dann Möglichkeiten zum laden von 3D-Modellen geben.

In Version 0.5.0 kommen dann CG-Shader an die Reihe.

Über Kommentare und andere Featurevorschläge freue ich mich immer (auch wenn es bis jetzt erst wenige gegeben hat),
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.
Seite 52 von 103   « Erste     242505152 535462102     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz