AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Andorra 2D [Ver. 0.4.5.1, 31.12.08]
Thema durchsuchen
Ansicht
Themen-Optionen

Andorra 2D [Ver. 0.4.5.1, 31.12.08]

Ein Thema von igel457 · begonnen am 24. Nov 2006 · letzter Beitrag vom 14. Sep 2011
Antwort Antwort
Seite 72 von 103   « Erste     2262707172 737482     Letzte »    
Benutzerbild von igel457
igel457
Registriert seit: 31. Aug 2005
Andorra 2D

Was ist Andorra 2D?
Nein, Andorra 2D hat nichts mit dem kleinen europäischen Staat "Andorra" zu tun. Wie das "2D" im Namen auch schon erraten lässt, handelt es sich um eine 2D Engine. Diese wird für Delphi und Lazarus (Freepascal) entwickelt und zwar um das bekannte und oft verwendete DelphiX abzulösen (was an DelphiX nicht so toll ist lest ihr am besten hier). Andorra 2D hat einen ähnlichen Aufbau wie DelphiX - das Spriteengineinterface ist sogar zu 99% das Gleiche.

Features
Was ist nun das Besondere an Andorra 2D?
- Hardwarebeschleunigung
- Verwendung von Plugins zur Grafikdarstellung wodurch OpenGL, DirectX oder sogar die GDI mit Andorra 2D verwendet werden können
- Integrierte und beschleunigte Spriteengine
- Integrierte Zoomfunktion in der Spriteengine
- Modularer aufbau von den Loadern für Texturformate, es können einfach eigene Hinzugefügt werden
- orthogonale und perspektivische Projektionsmatrix
- Integration von 3D-Modellen (die Loader sind noch nicht geschrieben)
- Schnelle Partikelsysteme
- Ausnutzung von Multi-Core CPUs
- Lichter
- Shadersupport (Cg und HLSL)
- Einfaches Surface-System
- Einfaches Scenenmanagement
- Videowiedergabe mit MPEG2 Support
- Verwendung von mehreren "Windowframeworks", wodurch Unabhängikeit von der VCL/LCL erreicht wird.
- Clipping/Splitscreens
- 2D Physikengine mit Newton
- Integriertes "Hardware Canvas"
- Mächtiges, voll Skinbares GUI-System
- Nicht überladen - man wird nicht zum benutzen bestimmter Features gezwungen (wie zum Beispiel Datenpackages, wie dies in anderen Engines der Fall ist)
- Opensource, entweder unter der CPL oder der GPL verwendbar
- Mächtiges Bundle von Editoren und Tools
- Deutsche Tutorials
- Viele Demos
- Und natürlich die Banalitäten, die man sich von einer 2D-Engine so wünscht: Rotation, Additives Zeichnen, Skalierung, BitBlt, Texturzugriffe et cetera

Da die Plugins nur um die Basisfunktionalitäten der Grafikschnittstellen Wrapen, könnte man die Plugins theoretisch für eine Hybrid 3D-Engine verwenden

Mehr Infos...
...sowie Tutorials und weitere Links...
gibt es auf der Website: http://andorra.sourceforge.net/
Dort findet ihr auch Demos, Tutorials und Screenshots...

Wenn ihr Fragen, Kritik oder Anregungen habt, dann könnt ihr diese entweder hier oder bei SourceForge posten.

Downloads:
Momentan gibt es die Version 0.4.5. Einen Überblick über alle Downloads gibt es hier.

Das Package mit allen Demos, Prerequisiten und Binaries gibt es in der neusten Version hier:
Andorra 2D All-In-One-Package 23MB

Tutorials:
Die Tutorials gibt es nicht nur auf der Website, sondern auch in der DP. Allerding möchte ich betonen, dass die Tutorials auf meiner Website aktueller sind. Ich kann meine eigenen Tutorials hier nämlich nicht mehr bearbeiten (@Daniel: dringend umändern!). Hier ist eine kleine Liste, wobei die Sterne die Schwierigkeit darstellen:
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngTutorial 1 - Installieren und Initialisieren
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngAndorra 2D über CVS aktualisieren
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngTutorial 2 - Das erste Bild
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngTutorial 3 - Die Spriteengine
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngPartikelsysteme
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngDer Canvas
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngDas GUI-System
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngAndorra 2D und Lazarus
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pngÜber Windowframeworks

FAQ:
Eine Sammlung oft gefragter Fragen findet sich hier:
http://andorra.sourceforge.net/index.php?section=FAQ

Wichtig:
Falls ihr ein Programm mit Andorra 2D geschrieben habt/daran schreibt, dann wäre es schön wenn ihr mir Bescheid sagen könnt. Dann bekomme ich nämlich mal einen Überblick, wer die Bibliothek nun überhaupt verwendet und außerdem kann ich auf meiner Website Screenshots von eurem Projekt einfügen und auch auf eine eventuelle Website eures Projektes verlinken.

Über diesen Thread:
Bitte schreibt hier nur Wünsche oder Anregungen herein, die direkt mit der Engine zu tun haben. Wenn ihr eine Frage über die Anwendung in eurer Anwendung habt, dann macht am besten einen eigenen Thread im Multimedia-Teil auf, bei dem ihr "[Andorra 2D]" vor den Titel schreibt.

Danke für euer Interesse,
Andreas
Miniaturansicht angehängter Grafiken
imagelisteditor_692.png   physics2_202.png   extended_spriteengine_868.png   wormhunter_412.png  
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
 
Benutzerbild von Diamondback2007
Diamondback2007

 
Delphi 2007 Professional
 
#711
  Alt 5. Jul 2008, 14:02
Ist es eigentlch normal, dass wenn ich Setup2DScene aufrufe, dass dann zwar die Grafiken resized werden, aber scheinbar die Größe und die Position intern nicht? Onclickevents meiner Sprites die über position und Größe definiert werden klappen dann nicht mehr korrekt...
Fabian E.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

 
Turbo Delphi für Win32
 
#712
  Alt 5. Jul 2008, 14:15
Was genau meinst du? Wenn ich setup2dScene aufrufe, wird die Spielfeldgröße geändert, sonst keine Größen verändert
@EugenB: benutzt du Windows oder Linux? Unter Linux läuft das ganze ohne Probleme bei mir, nachdem ich cthreads als erste Unit des programms hinzugefügt habe, in der Projektdatei habe ich also stehen:
Delphi-Quellcode:
  {$ifdef unix}
    cthreads,
  {$endif}
  Forms,
  Main in 'Main.pas', lazopenglcontext;
Wenn du das Problem unter Windows hast, versuche mal aktuelle Grafiktreiber zu installieren.
Miniaturansicht angehängter Grafiken
simplepartlin_763.png  
Nikolai Wyderka
  Mit Zitat antworten Zitat
EugenB

 
Lazarus
 
#713
  Alt 5. Jul 2008, 14:21
Benutze Windows, unter Windows laufen Threads eigentlich sofort

wenn ich die aktuelle Treiber von ATI installieren will kommt auf einmal "Die Treiber passen nicht zur Grafikkarte" = ATI Doof -.- ich versuchs später nochmal mal sehn ob dann die Treiber passen löl

Edit: Da die Installation immer abgebrochen ist, war ich mal so dreist und habe die Treiber von hand ausgewählt und voila die Demos laufen schonmal ^^

Edit2: Also ich kann nichtmal das erstellte Programm starten, benutze die SVN Version von Lazarus also 0.9.25 werde es später mit der 0.9.24 probieren mal sehn ob es dann geht
  Mit Zitat antworten Zitat
Namenloser

 
FreePascal / Lazarus
 
#714
  Alt 5. Jul 2008, 18:32
Zitat von inherited:
Delphi-Quellcode:
procedure TMainDlg.Panel1Resize(Sender: TObject);
begin
  if AdDraw1.Initialized then
  begin
    AdDraw1.Setup2DScene;
  end;
end;
Damit gibt es bei mir keine Probleme. Wenn das nicht weiterhilft, kannst du die Sourcen mal anhängen?
Das unterschiedet sich außer durch die if-Abfrage (die ich testweise auch eingebaut hab) nicht von meinem Code. Das Anhängen es Codes würde etwas schwierig, weil es sich bei dem Programm um einen Leveleditor handelt, der gleichzeitig auch die gesamte Spielphysik etc. (die mittlerweile allerdings alles andere als fertig ist bzw funktioniert) beinhaltet, sprich: da steckt relativ viel (größtenteils unkommentierter :/) Code sowie einige "Ressourcen-Dateien" dahinter, die ich mitliefern müsste, damit das Programm überhaupt kompiliert/funktioniert.

Wie auch immer, ich habe jetzt die Beobachtung gemacht, dass die Sprites irgendwie ihre richtige Größe behalten, obwohl sie gleichzeitig bei steigender Größe des Fensters/Panels pixeliger werden. Es macht fast den Eindruck, als würde hier etwas erst herunterskaliert und dann wieder hochskaliert. Wenn ich das Fenster kleiner als die Ursprungsgröße mache, werden die Sprites verkleinert. Bei der exakten Ursprungsgröße ist alles perfekt.

Ich habe 3 Screenshots angehängt, die das Problem ganz gut zeigen.


Vielen Dank für eure Hilfe!
Miniaturansicht angehängter Grafiken
screenshot_small_142.jpg   screenshot_medium_138.jpg   screenshot_big_107.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

 
Turbo Delphi für Win32
 
#715
  Alt 5. Jul 2008, 19:39
Hmmm,d as sieht in der Tat falsch aus. Zeig mir mal bitte deinen Initialisierungscode, also da wo du dein AdDraw erstellst.
Nikolai Wyderka
  Mit Zitat antworten Zitat
Namenloser

 
FreePascal / Lazarus
 
#716
  Alt 5. Jul 2008, 20:17
Hallo, inherited.

Also ich habe eine Klasse namens TSgGame, die sich um die Erstellung und Verwaltung des AdDraw-Objekts kümmert. Das Fenster, auf das gezeichnet werden soll, wird als Parameter Parent übergeben.
Delphi-Quellcode:
constructor TSgGame.Create(const Parent: tWinControl);
begin
  inherited Create;

  fPerformanceCounter := tAdPerformanceCounter.Create;
  AdDraw := TAdDraw.Create(parent);
  AdDraw.DllName := 'AndorraDX93D.dll';
  {...}
// Setup(parent.width,parent.height); <-- hab ich testweise in's OnCreate der Form verschoben. weiß nicht mehr wieso >.<
  adDraw.Initialize;
end;
Meine Mainform erzeugt im OnCreate eine Instanz von TSgGame:
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  {...}
  pDrawScreen.Align := alClient; // pDrawScreen ist das TPanel auf das gezichnet werden soll
  pDrawScreen.Caption := '...';
  {...}
  game := tsggame.Create(pDrawScreen);
  game.setup(pdrawscreen.width,pdrawscreen.height);
  {...}
  windowstate := wsmaximized;
  {...}
end;
TSgGame.Setup sieht so aus:
Delphi-Quellcode:
procedure TSgGame.setup(width, height: integer);
begin
  {...}
  if AdDraw.Initialized then
    AdDraw.Setup2DScene;
end;
Der Vollständigkeit halber noch der Code aus dem OnResize des Panels:
Delphi-Quellcode:
procedure TfrmMain.pDrawScreenResize(Sender: TObject);
begin
  if assigned(game) then // <-- Die Prüfung ist wegen dem doofen Bug, dass OnResize auch nach dem OnDestroy noch aufgerufen wurde oder so...
    game.setup(pdrawscreen.width,pdrawscreen.height);
end;
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

 
Turbo Delphi für Win32
 
#717
  Alt 5. Jul 2008, 22:06
Da bin ich jetzt ehrlich gesagt etwas ratlos, das sieht eigentlich korrekt aus
Könntest du eventuell nochmal deine Zeicheroutine zeigen?
Nikolai Wyderka
  Mit Zitat antworten Zitat
Benutzerbild von Diamondback2007
Diamondback2007

 
Delphi 2007 Professional
 
#718
  Alt 6. Jul 2008, 01:13
Also zum Thema Texturen werden vergrößert, die OnClick-Events aber nicht richtig berechnet geb ich euch hier mal eine Demo.

Einfach mal das Spiel starten und dann das Fenster resizen. Dann versucht mal die Buttons anzuklicken...

Der Code zum Überprüfen ob ein Button gedrückt wurde ist der folgenden:
Delphi-Quellcode:
function TGameButton.CheckOnClick(aX, aY: Integer; Up: Boolean): Boolean;
begin
  Result := false;
  if Enabled then
    begin
      if ((aX < X + Width) and (aX > X)) and
        ((aY > Y) and (aY < Y + Height)) then
        begin
          Result := true;
          if Up then
            OnUp
          else
            OnDown;
        end
      else
        begin
          ButtonStat := bsUp;
          ChangeTex(true);
        end;
    end;
end;
Angehängte Dateien
Dateityp: rar td_andorra_317.rar (2,98 MB, 6x aufgerufen)
Fabian E.
  Mit Zitat antworten Zitat
Namenloser

 
FreePascal / Lazarus
 
#719
  Alt 6. Jul 2008, 02:38
Zitat von inherited:
Da bin ich jetzt ehrlich gesagt etwas ratlos, das sieht eigentlich korrekt aus
Könntest du eventuell nochmal deine Zeicheroutine zeigen?
Der Code zum Zeichnen der Tiles ist in diesem Fall folgender:
Delphi-Quellcode:
// Diese procedure wird von TSgGame für jedes Tile aufgerufen, dass gezeichnet werden soll:
procedure TSgGame.DoPaintTile(const Tile: tSgTile);
var
  done: boolean;
begin
  done := false;
  if Assigned(fOnPaintTile) then
    fOnPaintTile(Tile,done);
  if not done then
    if Tile.sprite <> nil then
      Tile.DrawTo(adDraw,Camera);
end;

// Diese procedure wird durch den obigen Code aufgerufen:
procedure TSgEditMode.PaintTile(const Tile: tSgTile; var Done: Boolean);
{...}
begin
  {...}
  if Tile.sprite <> nil then
  begin
    Tile.sprite.Color := cl; // Tile wird je nach Typ eingefärbt
    Tile.sprite.Draw(fParent.adDraw,round(Tile.left-fParent.Camera.left),
      round(Tile.top-fParent.Camera.top),0);
    Tile.sprite.Color := clwhite;
  end;
  {...}
  Done := True;
end;
Erläuterung:
Ich habe Zusatzfunktionen, wie zum Beispiel die Editorfunktion als eine Art "Plugin" geplant. TSgGame verwaltet eine Liste mit Plugins, die sich in bestimmte Events einklinken können, um bestimmte Funktionen nachzurüsten (praktisch z.B. für einen Debug-Mode).
Dieses Plugin belegt das Event OnPaintTile des TSgGame-Objektes. Das Plugin sorgt dann dafür, dass z.B. ein Rahmen um das Tile gezeichnet wird, der im Spiel hinterher natürlich nicht erschinen soll, und dass das Tile eingefärbt wird.


Schlussendlich noch die Paint-Routine von TSgGame:
Delphi-Quellcode:
procedure TSgGame.Paint;
var
  x1,y1,x2,y2: integer;
  i: integer;
  tmptilelist: tsgtilelist;
begin
  if addraw.CanDraw then
  begin
    fPerformanceCounter.Calculate;
    fTimeGap := fPerformanceCounter.TimeGap/100;

    adDraw.BeginScene;
    adDraw.ClearSurface(clblack);

    // Der folgende Code scheint etwas komplex, was daran liegt, dass ich die gesamte Spielfläche
    // zur Optimierung in ein Raster unterteile. Jede Zelle enthält eine Liste, die speichert, welche
    // Tiles in ihr liegen.
    // Der Code tut also folgendes: Er sucht alle Quadrate die im Sichtfeld liegen und liest alle in
    // diesen Quadraten vorhandenen Tiles in eine temporäre Liste ein. In der for-Schleife wird dann
    // jedes Element gezeichnet. (natürlich kann schlimmstenfalls es passieren, dass ein Tile so 4 mal
    // gezeichnet wird, was aber imemr noch effizienter sein dürfte, als immer ALLE Tiles zu zeichnen
    x1 := floor(camera.left-bg_sectorsize);
    y1 := floor(camera.top-bg_sectorsize);
    x2 := floor(camera.left+camera.width);
    y2 := floor(camera.top+camera.height);

    tmptilelist := tsgtilelist.Create(false);
    Map.Grid.TilesNearRect(x1,y1,x2,y2,tmptilelist);
    for i := 0 to tmptilelist.Count - 1 do
      DoPaintTile(tmptilelist[i]);
    freeandnil(tmptilelist);

    {...}

    adDraw.EndScene;
    adDraw.Flip;
  end;
end;

@Diamondback2007:
Also das erste Fenster kann ich bei dir nicht in der Größe verändern, und im zweiten ändert sich die Größe der Darstellung nicht und die Buttons funktionieren auch.
Bei mir werden die Koordinaten nur beim kleinen Screenshot falsch zugeorndet, der Rest funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von Diamondback2007
Diamondback2007

 
Delphi 2007 Professional
 
#720
  Alt 6. Jul 2008, 09:31
Ähm ich meine nicht die GUI, sondern das Spiel. erst mal Spiel starten drücken
Fabian E.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 72 von 103   « Erste     2262707172 737482     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz