Delphi-PRAXiS
Seite 13 von 26   « Erste     3111213 141523     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 22. Feb 2008 15:41

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Komisch, die AdStandardFontGenerator.pas sollte durch das Definieren des Kompilerschalters deaktiviert werden:
Delphi-Quellcode:
//Auszug aus AdDraws.pas

uses
  SysUtils, Classes,
  AdClasses, AdTypes, AdList, AdPersistent,
  AdWindowFramework, AdDLLLoader,
  AdCanvas, AdBitmap, AdFontFactory, AdFont
  {$IFNDEF DO_NOT_INCLUDE_STD_FORMATS}
  ,AdStandardFontGenerator, AdSimpleCompressors, AdFormats
  {$ENDIF}
  {$IFNDEF DO_NOT_INCLUDE_STD_WINDOWMGR}
  ,AdComponentWindow
  {$ENDIF};

xZise 23. Feb 2008 13:08

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Hallo Andreas,
ich wollte gerade an Freggels II weitermachen, und muss erstmal alle Änderungen durchführen :)

Nun bekomme ich jetzt ständig Fehlermeldungen bezüglich des Fonts?
Kann ich jetzt kein Font zwischenspeichern und immer wieder verwenden?

Davon abgesehen:
Ich quäle mich gerade mit der AdGUI durch.
Und zwar habe ich das Problem dass er bei mir nichts anzeigt, obwohl ich alles so gemacht habe, wie verlangt.
Also ein Objekt davon erstellt, und das auch freigegeben.

Nun zeichnet er nichts, also dachte ich, im Tutorial stehe nicht, dass ich in der Schleife AdGUI.Draw schreiben müsste.
Also auch das gemacht, und es tauchte immerhin meine GUI auf, aber mehr auch nicht!
Also auch keinen Cursor...

Und auch habe ich mir "AdGUI.Draw" das Problem, dass das Formular nicht zentriert ist, obwohl die Eigenschaft auf "true" steht.

MfG
xZise

igel457 23. Feb 2008 16:23

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Hallo Fabian,

blättere in diesem Thread mal zwei Seiten zurück und schaue dann ganz unten - da habe ich das mit dem neuen Fontsystem schon einmal erklärt. Den von Fonts.GenerateFont zurückgegebenen Font kannst du natürlich zwischenspeichern.

Für den Fehler im GUI-Tutorial entschuldige ich mich, es müsste AdGUI.Update heißen.

Danke für die Fehlerbeschreibungen,
Andreas

xZise 23. Feb 2008 16:25

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Liste der Anhänge anzeigen (Anzahl: 2)
o.O Was ist mit der DP los. Wo ist der Text hin:
Zitat:

Zitat von igel457
Hallo Fabian,

blättere in diesem Thread mal zwei Seiten zurück und schaue dann ganz unten - da habe ich das mit dem neuen Fontsystem schon einmal erklärt. Den von Fonts.GenerateFont zurückgegebenen Font kannst du natürlich zwischenspeichern.

Für den Fehler im GUI-Tutorial entschuldige ich mich, es müsste AdGUI.Update heißen.

Danke für die Fehlerbeschreibungen,
Andreas

@ GUI:
Okay... Also irgendwas stimmt da nicht. Und zwar bewegt sich nicht die Maus...
Außerdem sieht das... Naja etwas gewöhnungsbedürftig aus.

[edit=0]Das mit der Maus hat sich erledigt! Der Connector fehlte.[/edit]
[edit=1]Ich habe eine Frage zur der AdImageList: Und zwar würde ich gerne wissen, wie viele Frames auf einen Bild sind :) Ich habe nämlich das Problem, sobald man eine andere Animation verwendet, es sein könnte dass die Frames unterschiedlich sind. So kann ich Beispielsweise keine anderen Bilder verwenden die mehr oder weniger als 8 Frames haben.

Konkretes Beispiel: Du erlaubst es deinen Spielern selber "Styles" zu entwerfen, also auch mit verschiedenen Figuren. Was ist aber wenn statt 8 Frames die Figur 12 Frames hat...

Btw.: Könnte man die Videos nicht so ähnlich machen, wie eine Animation? Also eine AdImageList schnell abspielen?[/edit]
[edit=2]Ich habe mal ein Beispielprojekt angehangen. Ruckelt leider, weil ich es nicht hingekriegt habe, jeden Frame einzeln abzufotographieren :(
Außerdem sind bestimmt einige Kniffe von A2D nicht umgesetzt :) Es sollte eigentlich nur als Beispiel dienen. Und das "Video" ist jetzt schon 50 MB groß... Aber da 7z auf 3 % ( :shock: ) runterkomprimiert hat kein Problem für die DP ^^

Eine Frage bezüglich des Kompressors: Ich hatte zuerst PNG genommen, aber da is nix passiert ?!
Übrigens solltest du das ModalResult von dem Cancelbutton im ILE auf mrCancel setzten (z.Zt. ist es mrOk)[/edit]

MfG
xZise

igel457 24. Feb 2008 09:40

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Hallo,

wie viele Frames (nach DelphiX Pattern genannt) auf einem Bild sind, kannst du über die Property AdImage.PatternCount herausfinden. Um Videos kümmere ich mich früher oder später - dann kannst du gleich MPEGs abspielen. Das schnelle Abspielen einer ImageList funktioniert zwar, benötigt aber unnötig viel Grafikkartenspeicher. Das ganze müsste per Multithreading und über einen Ringpuffer realisiert werden.

Um den Fehler mit dem Font auf deinem Screenshot kümmere ich dann auch noch, ich habe diesen selbst auch schon festgestellt.

Kannst du mir das mit dem PNG-Kompressor noch einmal näher erklären, ich verstehe nicht so ganz, was du meinst :gruebel: .

Hoffe geholfen zu haben,
Andreas

xZise 24. Feb 2008 09:49

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Hi Andreas,
Das mit dem PatternCount hatte ich auch gerade herausgefunden.

Und das Video mit der Liste hat auch einen Nachteil :mrgreen: : Du hast keinen Sound...

Außerdem befindet sich bei GUI das Formular immernoch nicht in der Mitte ;)

Und das mit dem PNG Kompressor ist behoben:
Ich hatte in der ImageList als Kompressor PNG genommen und dachte das reicht, aber stattdessen muss ich noch den Kompressor auf PNG setzten (von der ImageList, die die Bilder lädt).

Und ich habe eine Frage: Und zwar könnte ich irgendwie Bilder vergrößern / verkleinern? Ich habe das Problem das die Grundgröße 64 px ist, aber ich habe den Spieler in 96 px und zwei Objekte in 32 px. Ich hätte aber gerne alles auf 64 px skaliert :)

MfG
xZise

igel457 24. Feb 2008 10:58

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Das setzten des Kompressors sollte eigentlich nicht notwendig sein, sofern du die entsprechende Loader-Unit eingebunden hast.

Bilder kannst du einfach über die StretchDraw-Prozedur während der Laufzeit vergrößert/verkleinert darstellen. Anders musst du wohl zu einem Grafikprogramm deines Vertrauens greifen.

Wenn du sonst noch Fragen hast, melde dich einfach,
Andreas

xZise 24. Feb 2008 14:19

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Zitat:

Zitat von igel457
[...]Bilder kannst du einfach über die StretchDraw-Prozedur während der Laufzeit vergrößert/verkleinert darstellen. Anders musst du wohl zu einem Grafikprogramm deines Vertrauens greifen.[...]

Hmmm, und wie meinst du das mit dem StrechDraw?

Weil wenn ich "<SpriteEngine>.Draw;" mache, was müsste ich dann umstellen?

Ich könnte natürlich auch die Bilder vergrößern/verkleinern.

MfG
xZise

igel457 24. Feb 2008 14:28

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Achso, du möchtest Sprites in der Größe anpassen - dazu sollte es reichen die "Width" bzw. "Height" Property entsprechend einzustellen. Im Notfall musst du die Prozedur "DoDraw" deines Sprites überschreiben. Schau dazu einfach mal in den Quellcode von TImageSprite.DoDraw

xZise 24. Feb 2008 15:18

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Okay, dann werde ich wohl eher die Bilder auf eine Größe bringen.

Wo wir gerade bei Größe sind:
Kann ich irgendwie sagen, wann zwei Sprites kolidieren?
Weil ich habe einen Diamanten und eine schmale Person. Nun kolidieren die schon, sobald das eine Sprite das andere berührt.

Außerdem bekomme ich jetzt eine AV. Ich weiß zwar wie ich die auslöse, habe aber keine Ahnung, wie ich verhindere, dass sie ausgelöst wird ohne dabei den Auslöser zu entfernen. xD
Also ich habe mehrere Sprite Klassen:
Delphi-Quellcode:
TFrInteractiveObject = clas(TImageSprite);

TFrPlayer = class(TFrInteractiveObject);
Wenn nun ein Objekt vom Typ TFrPlayer sich bewegt rufe ich "Collision" auf und damit auch "DoCollision". Dort überprüfe ich, ob das Objekt, mit dem es kolidert von TFrInteractiveObject ist.
Nun bewege ich das weiter (wie die Person), und teste dann, ob das Objekt mir irgendwas koldiert (z.B. einer Wand).
Wenn ich die zweite Überprüfung entferne funzt alles, ansonsten bekomme ich eine AV, und bleibt in folgender Funktion hängen (Zeile 14).
Delphi-Quellcode:
procedure TSprite.Collision2;
var
  i: Integer;
begin
  //Cancel if this sprite doesn't support collisions.
  if CanDoCollisions then
  begin
    if (Self<>FEngine.FCollisionSprite) and
        OverlapRect(FEngine.FCollisionRect,BoundsRect) and
        TestCollision(FEngine.FCollisionSprite) then
    begin
      FEngine.FCollisionCount := FEngine.CollisionCount + 1;
      FEngine.FCollisionSprite.DoCollision(self, FEngine.FCollisionDone);
      if FEngine.FCollisionSprite.Deaded or (not FEngine.FCollisionSprite.CanDoCollisions) then
      begin
        FEngine.CollisionDone := true;
      end;
    end;
    if not FEngine.FCollisionDone then
    begin
      for i := 0 to FList.Count - 1 do
      begin
        FList[i].Collision2;
        if FEngine.CollisionDone then
        begin
          break;
        end;
      end;
    end;
  end;
end;
MfG
xZise

igel457 24. Feb 2008 15:45

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Du gibst nicht zufälligerweise irgendwo ein Sprite mittels "Free" frei? Dies sollte immer über die Methode "Dead" geschehen.

xZise 24. Feb 2008 15:48

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Zitat:

Zitat von igel457
Du gibst nicht zufälligerweise irgendwo ein Sprite mittels "Free" frei? Dies sollte immer über die Methode "Dead" geschehen.

Jap ich weiß und deshalb: Nein tue ich nicht.

chaosben 25. Feb 2008 07:17

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Zitat:

Zitat von igel457
Komisch, die AdStandardFontGenerator.pas sollte durch das Definieren des Kompilerschalters deaktiviert werden

Na klar, das wars. Danke.

busybyte 26. Feb 2008 17:59

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Ich kann mich auch irren (habe den Source noch nicht heruntergeladen) ,
aber wenn Flist vom Typ Array of TSprite ist,dann rufst Du immer wieder die gleiche Procedure auf ohne
CollisionDone zu setzen.Code gekürzt,zur Übersicht.
Delphi-Quellcode:
procedure TSprite.Collision2;
begin
   if (Self<>FEngine.FCollisionSprite) and
        OverlapRect(FEngine.FCollisionRect,BoundsRect) and
        TestCollision(FEngine.FCollisionSprite) then
    begin
      if FEngine.FCollisionSprite.Deaded or (not FEngine.FCollisionSprite.CanDoCollisions) then //<-
        FEngine.CollisionDone := true;      //<-
 
  if not FEngine.FCollisionDone then        //<-
    begin
      for i := 0 to FList.Count - 1 do
      begin
        FList[i].Collision2;                 //<-
//if NOT FList[i] =FEngine.FCollisionSprite.Deaded or (not FEngine.FCollisionSprite.CanDoCollisions) then Endlos-Loop
        if FEngine.CollisionDone then
        begin
          break;
        end;

igel457 26. Feb 2008 20:02

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

jetzt ist die MPEG2-Videowiedergabe auch mit Andorra 2D möglich. Meine aktuelle Implementierung schafft bei laufendem PAL-Video ca. 600 FPS. Sprich, während der Videowiedergabe kann man nebenbei noch sein Spiel laufen lassen. Erreicht habe ich dies durch Multi-Threading.

@busybyte:
Ich schaue danach, aber eigentlich habe ich es (soweit ich mich erinnern kann) direkt aus DelphiX übernommen. Das bedeutet aber nicht das es so richtig sein muss.

Danke für den Hinweis,
Andreas

xZise 27. Feb 2008 20:52

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Wo das mit MPEG sieht ja geil aus :)
Eine Sache übrigens ^^
Und zwar habe ich WormHunter etwas "frisiert", so dass er solange Sprites erstellt, bis die FPS absackt (< 60 Hz).
Und ich habe ungefähr 1000 Würmer gehabt. Und wenn ich die FPS-Grenze auf 40 Hz setze, dann krieg ich nochmal 300 mehr.
Also so ab 1000 Würmer bricht die dann aber schon ziemlich ein, während es vorher stabil ist (wobei das eher Frameratelimitierung ist?).

MfG
xZise

igel457 1. Mär 2008 17:29

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

das Experiment mit der Sprite-Engine ist interessant. Ich werde mir das mal anschauen.

Im Anhang befindet sich eine kleine Demo meines Videoplayers plus ein Beispielvideo (logo.m2v). Wäre schön wenn sich das mal jemand anschauen kann.

Gravitar 2. Mär 2008 11:18

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Zitat:

Zitat von igel457
Hallo,

Im Anhang befindet sich eine kleine Demo meines Videoplayers plus ein Beispielvideo (logo.m2v). Wäre schön wenn sich das mal jemand anschauen kann.

Hi,

habe ich mir angeschaut. Mit dem mitgelieferten Video funktionierts. Mit meinen MPEG-2-Videos (.mpg direkt über dvb-t aufgenommen) allerdings nicht. Auch nicht nach Änderung der Extenxion in m2v.

Gruß,Andreas

igel457 2. Mär 2008 11:35

Re: Andorra 2D [Ver. 0.30 STABLE, 04.01.08]
 
Du musst auch erst die MPEG2-Video (*.m2v) Daten aus dem ProgramStream (*.mpg) extrahieren. Schau mal hier, dort gibt es ein entsprechendes Programm.

igel457 3. Mär 2008 19:50

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

Endlich läuft Andorra 2D auch mit Lazarus unter Windows und Linux und vermutlich auch unter MacOS (wäre toll wenn das mal jemand testen könnte).

Eine Übersicht über alle verfügbaren Downloads der neuen Version gibt es hier:
http://andorra.sourceforge.net/index...tion=downloads


Folgende Dinge haben sich seit der letzten Version verändert:
- Einführung von Windowframeworks
- Eventmanagement von Windowframeworks
- Umstellen des AdGUIConnector auf Windowframeworks
- Umstellen der Plugins auf Windowframeworks
- Hinzufügen der Methode "TAdCanvas.Polygon"
- Einführen der Andorra Video Texture API
- Hinzufügen eines einfachen MPEG2-Video Decoders, der libmpeg2 verwendet
- Zusammenfassen aller Header in einem Lib-Verzeichnis
- Umprogrammieren der JclSimpleXML-Unit für Lazarus Kompatibilität, als AdSimpleXML hinzugefügt.

Viel Spaß mit der neuen Version, wäre toll wenn es mal jemand unter Linux ausprobieren könnte.

Außerdem gibt es neue Tutorials:
Lazarus und Andorra 2D: http://andorra.sourceforge.net/index.php?bb=lazarus1ger
Über Andorra 2D Windowframeworks: http://andorra.sourceforge.net/index...frameworks1ger

Ich freue mich auf eure Erfahrungsberichte und massig Feedback, :wink:
Andreas

Looper 3. Mär 2008 20:30

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Muss man noch etwas bestimmtes umstellen damit es funktioniert? Bei mir kommt in der Zeile
Delphi-Quellcode:
if AdDraw.Initialize then
ne Fehlermeldung:
Zitat:

Zugriffsverletzung bei Adresse 0000000E. Lesen von Adresse 0000000E.
Also ein klassischer Nil-Pointer. Hatte mit den alten Units fehlerfrei funktioniert;).

mfg Looper

// Die AdLog sagt folgendes:
Zitat:

[Info] TAdDraw: AdDraw was created: 21:29:35
[Info] TAdDraw: Finalization Complete.

igel457 4. Mär 2008 08:41

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Kannst du die "Initialize"-Routine mal durchdebuggen und schauen wo genau der Fehler kommt?

Achja: Hast du vielleicht vergessen die Plugin-DLL auszutauschen?

Looper 4. Mär 2008 12:54

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Ja, hatte ich. Funktoniert jetzt wie vorher.

mfg Looper

BUG 4. Mär 2008 13:57

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

Zitat von igel457
Achja: Hast du vielleicht vergessen die Plugin-DLL auszutauschen?

Würde sich vielleicht anbieten, eine automatisch Versionsprüfung zu machen und wenn nötig eine Fehlermeldung auszugeben ...

MfG,
Bug

igel457 4. Mär 2008 14:34

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Gute Idee. Dabei werde ich auch eine Compilerüberprüfung (Delphi oder FPC) einbauen, sodass man nicht versehentlich das Lazarus OpenGL-Plugin mit einem Programm, das mit Delphi kompiliert wurde, lädt.

Looper 5. Mär 2008 11:38

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Also ich habe jetzt mal wieder ein Problem :roll: :
Sitze gerade im Informatikunterricht (Windows 2000, keine Adminrechte) und das Programm hängt in der
Funktion
Delphi-Quellcode:
function TAdDllLoader.LibraryLoaded:boolean;
in der Methode
Delphi-Quellcode:
if AdDraw.Initialize
von TAdDraw.
Es kommt ein EAccessViolation (Meldung: 'Zugriffsverletzung bei Adresse 00D3A0EF in Modul 'AndorraDX93D.dll'. Lesen von Adresse 00000000'. Prozess wurde angehalten.)

Kann das am Betriebssystem oder an den Adminrechten liegen? Wenn ich hinterher zu Hause bin, werde ich überprüfen, ob derselbe Fehler nochmal kommt (keine Adminrechte, Windows XP).

mfg Looper

//
Zitat:

[Info] TAdDraw: AdDraw was created: 14:08:42
[Info] TAdDraw: Try to initialize Andorra Direct3D 9 Plugin.
[Fatal Error] TAdDraw: No connection to the default device.
[Warning] TAdDraw: The current device does not support "HARDWARE TRANSFORM AND LIGHT".
[Warning] TAdDraw: The current device settings may be unsupportet.
[Info] TAdDraw: Try to use other modes.
[Fatal Error] TAdDraw: The current device settings are unsupportet. Try another adapter mode.
[Info] TAdDraw: Finalization Complete.

Progman 5. Mär 2008 14:15

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
@Looper: Ich denke, da fehlt schlichtweg DirectX 9c auf dem System.
Und wie aus dem Log zu entnehmen ist, hat die Grafikkarte bzw. der Treiber keine 3D-Unterstützung. Die ist aber zwingend erforderlich.

Looper 5. Mär 2008 14:35

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Ja, das dachte ich auch, aber ich habe auch schon mit Andorra 2D auf diesem PCs gearbeitet - ohne Probleme.
Allerdings habe ich jetzt mit der Partikel-Engine gearbeitet. Vielleicht wird nur die nicht unterstützt. Naja ich versuche nächstes Mal weiter das zum Laufen zu bringen. Ich werde jetzt ertsmal alle dll's löschen, die neuen nochmal kompilieren und dann schauen. Vielleciht lag es ja nur daran.

franktron 5. Mär 2008 14:54

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Ja weil du jetzt T&L brauchst und das hat die Karte wohl nicht

Looper 5. Mär 2008 15:17

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Ja, wahrscheinlich haben die PCs gar keine Grafikkarte sondern nur nen Chip auf dem Mainboard (naja is auch egal, in der Schule progge ich sowieso nicht sehr ernsthaft)

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 01:28 Uhr.
Seite 13 von 26   « Erste     3111213 141523     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