Delphi-PRAXiS
Seite 88 von 103   « Erste     3878868788 899098     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)

xZise 1. Jan 2009 14:30

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Neben den ganzen Übersetzungen habe ich die Unit AdSprites erweitert. Und zwar ist es ja nicht sinnvoll in einer Engine nach Sprites zu suchen, sondern direkt in der Liste (so kann diese Funktionalität auch in Abkömmlingen verwendet werden). Deshalb habe ich der Klasse TSpriteList "GetSpritesAt" verpasst:
Delphi-Quellcode:
procedure TSpriteList.GetSpritesAt(ASpriteList: TSpriteList; const AX,
  AY: Integer; const ASpriteClass: TSpriteClass);
var
  i : Integer;
  Rect : TAdRect;
begin
  if Assigned(ASpriteList) then
  begin
    ASpriteList.Clear; // Standard ?
    for i := 0 to Count - 1 do
    begin
      Rect := Items[i].BoundsRect;
      if (AX >= Rect.Left) and (AX <= Rect.Right) and
         (AY >= Rect.Top) and (AY <= Rect.Bottom) and
         (Items[i] is ASpriteClass) then
      begin
        ASpriteList.Add(Items[i]);
      end;
    end;
  end;
end;
Und dann das in der Engine dahingehend abgeändert, dass es wie ".Clear" bei einer ListView arbeitet indem es einfach das der Liste aufruft:
Delphi-Quellcode:
procedure TSprite.GetSpritesAt(const AX, AY: Integer; ASprites: TSpriteList;
  AClass: TSpriteClass);
begin
  Items.GetSpritesAt(ASprites, AX, AY, AClass);
end;
Da die andere Methode diese Aufruft muss diese nicht geändert werden.

MfG
xZise

PS: Diese Funktion basiert noch auf 0.4.5 (ich hoffe da gabs keine Änderung die dies nicht möglich machen).
PPS: Danke für die Lizenzinformationen.

igel457 1. Jan 2009 14:41

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Ähm... Das hast du mir doch schonmal geschickt, und ich habe es schon längst eingebaut. Das ist schon in dem 0.4.5.1 Release.

xZise 1. Jan 2009 14:45

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Ehm nein ^^ Davor war es eine Funktion der Klasse TSprite jetzt ist es eine der Klasse TSpriteList und TSprite ruft die der TSpriteList auf ;)

MfG
xZise

inherited 1. Jan 2009 18:29

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Es ist die Frage ob man wirklich auf Assigned prüfen sollte am Anfang. Wenn man eine nicht valide Liste übergibt würde ich erwartten, dass eine Exception geschmissen wird und nicht einfach nur nichts passiert.

xZise 1. Jan 2009 21:28

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Hmm stimmt, das wäre tatsächlich besser und nachher hilfreicher. Kann Igel ja ändern ;)

Und in welchen Format speichert AdBitmap.SaveToFile die Datei ab? Ich wollte nämlich mal gucken woran es liegt, das unter Delphi 2009 der ImageListEditor nicht funktioniert (also die Vorschau anzeige in der ListView nicht mit Transparenzen umgehen kann). Kann es sein, dass es sich um ein von dir entwickeltes Format handelt? Wie kann ich das Umstellen?

Zu der Änderung im obigen Sourcecode: Statt Items.Count wird nur Count aufgerufen. Außerdem ist zu beachten, dass einige Parameter umbenannt wurden ;)

Und eine Frage zur Lizenz: Ist es mir dann auch möglich das Programm unter BY-NC-SA zu stellen? (Ich habe Sourcecodeteile aus deinem ImageEditor verwendet).

MfG
xZise

Florian H 1. Jan 2009 23:35

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Aloha igel,

ich wollte jetzt eigentlich mal das TAdTextureSurface benutzen, um statische Dinge nicht in jedem Zeichenschritt zeichnen zu müssen ... allerdings gibt es ein Problem: Das Ganze funktioniert nur mit dem OpenGL-Plugin.

Wenn ich das DirectX-Plugin verwende, sehe ich im AdDraw nicht, was ich aufs TextureSurface und anschließend von diesem auf das Addraw gezeichnet habe. Mit dem OpenGL-Plugin funktioniert es jedoch.

Habe heute auf die aktuelle Andorra-Version aktualisiert (das Komplett-Paket, kein CVS) und natürlich auch die aktuellen DLLs in das Programmverzeichnis gepackt.

Edit: Aber ansonsten ein dickes Danke für das Feature, hat mir beim performanceschwachen OpenGL einen dicken Geschwindigkeitsboost gebracht, da bei Drawball ja sehr viele Einzelelemente gemalt werden, das kann ich mir jetzt auf einfache und schnelle Weise sparen. Früher wäre das relativ doof und umständlich gewesen.

Edit2: Wenn ich das Fenster vom einen Monitor auf den anderen verschiebe, vergisst das TextureSurface seinen Inhalt und ich muss ihn neuzeichnen. Ist das normal, wegen unterschiedlicher Ausgabedevices? Dann müsste ich mir wohl einen Code suchen, der das erkennt.

xZise 2. Jan 2009 00:23

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Ich habe übrigens ein Speicherleck in AdDraws.pas gefunden (Z. 2601 - 2608 in Version 0.4.5.1):
Delphi-Quellcode:
procedure TAdTexture.SaveToFile(AFile: string);
var
  ms:TMemoryStream;
begin
  ms := TMemoryStream.Create;
  SaveToStream(ms);
  ms.SaveToFile(AFile);
end;
Du gibst den MemoryStream nie frei!

Die Methode (Z. 2610 - 2619) procedure TAdTexture.LoadFromFile(AFile: string);) darunter hat nebenbei auch keinen Ressourcenschutzblock . Beabsichtigt?

Übrigens geht deine Dokumentation im Internet nicht :( Oder weiß jemand, wie ich den Inhalt eines AdImages in einen PNG Datei speichere?

MfG
xZise

Romi 2. Jan 2009 02:03

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Zitat:

Zitat von igel457
Hast du DefaultParticle auch entsprechend gecastet? Schau dir mal die SimpleParticle Demo an. Standardmäßig ist default Partikel vom Typ "TAdStdParticle":
Delphi-Quellcode:
with partengine.DefaultParticle as TAdStdParticle do
  LifeTime := 0.5;

Jip, damit gehts!

igel457 2. Jan 2009 10:12

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Hallo,

@xZise
Deinen Sourcecode baue ich bei Gelegenheit ein. AdBitmap.SaveToFile schreibt die Daten (wie im zweiten Tutorial beschrieben) in ein Andorra internes Format. Zu den eigentlichen Bilddaten kommen Informationen über das Texturobjekt (Breite, Höhe, Bittiefe) hinzu. Das Memoryleak behebe ich, Ressourcenschutzblöcke füge ich hinzu. Die Dokumentation habe ich jetzt endlich erfolgreich über SSH entpackt. Wenn du ein Andorra-Bild in ein anderes Grafikobjekt speichern willst, kannst du die Funktion "SaveToGraphic" verwenden.

@Florian
Wenn das Surfaceobjekt mit OpenGL funktioniert, sollte es eigentlich erst recht mit DirectX gehen. Hast du mal die Surface-Demo ausprobiert? Bei dem Problem mit den zwei Monitoren kann ich leider nicht helfen, da ich nur einen Monitor habe.

Florian H 2. Jan 2009 10:19

Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
 
Zitat:

Zitat von igel457
@Florian
Wenn das Surfaceobjekt mit OpenGL funktioniert, sollte es eigentlich erst recht mit DirectX gehen. Hast du mal die Surface-Demo ausprobiert?

Die kriege ich leider nicht zum Laufen, die beendet sich direkt wieder. Kann aber auch daran liegen, dass ich erst in ein paar Units rumpfuschen muss, um die Delphi6-inkompatiblen Sachen zu ändern ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.
Seite 88 von 103   « Erste     3878868788 899098     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