zusammen mit ein paar Freunden arbeite ich an einem kleinen 2D Spiel. Für unsere Spielwelt benutzen wir das Programm Tiled. Aus Gründen der Performance sollen die Welt in 2 visuelle Ebenen eingeteilt werden: Unter dem Spieler und über dem Spieler.
Nun ist es jedoch so, dass unser Mapper ziemlich viele Ebenen benötigt um genug Details einbauen zu können. Außerdem besteht die Spielewelt aus mehreren Unterbereichen. Um uns das Leben ein wenig einfacher zu machen, werden diese Maps als PNG exportiert und dann zu einem großen Bild verbunden.
Von der Dateigröße her sind aber "normale" Tile-Maps sinvoller. Die Idee war daher, dass wir das große Bild wieder in kleine Einzelteile zerlegen und überschüssige Bereiche herausnehmen.
In einem Proof-Of-Concept zum Thema Analyse stellte sich heraus, dass diese Idee grundsätzlich funktioniert. Es scheitert jedoch an einem Punkt: Die Transparentz geht "kaputt".
Um zu prüfen, ob ich vielleicht etwas übersehen habe, habe ich folgenden erstellt:
Code: Alles auswählen
var
Test : TPortableNetworkGraphic;
X, Y : Cardinal;
lColor : TFPColor;
begin
Test := TPortableNetworkGraphic.Create;
Test.LoadFromFile('C:\mytest123.png');
Test.PixelFormat := pf32Bit;
for Y := 0 to 255 do
begin
for X := 0 to 255 do
begin
lColor := Test.Canvas.Colors[X, Y];
if lColor.alpha > 0 then
begin
lColor.red := $FFFF;
end;
Test.Canvas.Colors[X, Y] := lColor;
end;
end;
Test.SaveToFile('C:\mytest123_2.png');
Test.Free;
end;
Das klappt auch. Nur das im Endergebnis die fließende Transparent völlig verschwindet und nur noch ein "Solide/Transparent" Mix ensteht.
Hier mal ein Vorher und Nachher der Bilder.