![]() |
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:
Und dann das in der Engine dahingehend abgeändert, dass es wie ".Clear" bei einer ListView arbeitet indem es einfach das der Liste aufruft:
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;
Delphi-Quellcode:
Da die andere Methode diese Aufruft muss diese nicht geändert werden.
procedure TSprite.GetSpritesAt(const AX, AY: Integer; ASprites: TSpriteList;
AClass: TSpriteClass); begin Items.GetSpritesAt(ASprites, AX, AY, AClass); end; 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. |
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.
|
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 |
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.
|
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 |
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. |
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:
Du gibst den MemoryStream nie frei!
procedure TAdTexture.SaveToFile(AFile: string);
var ms:TMemoryStream; begin ms := TMemoryStream.Create; SaveToStream(ms); ms.SaveToFile(AFile); end; 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 |
Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
Zitat:
|
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. |
Re: Andorra 2D [Ver. 0.4.5.1, 31.12.08]
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr. |
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