![]() |
[Andorra 2D] Masken bei Texturen - Seltsamer Bug
Liste der Anhänge anzeigen (Anzahl: 1)
Heyho Community,
ich hoffe es gibt hier noch ein paar Leute, die sich zumindest etwas mit Andorra 2D beschäftigt haben, weil ich nämlich an einer Stelle hängen bleibe. Ich baue grad' nen Mapeditor und möchte die Übergänge von den Texturen bzw. Tiles mit Hilfe von Masken erstellen, damit ich sozusagen für mehrere Übergänge nur eine andere Textur (Gras, Erde) drunter legen muss. Mit etwas Recherche ( ![]()
Delphi-Quellcode:
TTile = class(TImageSprite)
private ImageBmp, Mask: TAdBitmap; MaskObject: TImageSprite; function GetTransitionNumber: integer; public FCaption: string; FRasterX, FRasterY: integer; constructor Create(AParent: TSprite); override; procedure SetCaption(TerrainName: string); procedure SetCoordinates(rX, rY: integer; rZ: integer = 10); procedure UpdateTransitions; published property Caption: string read FCaption write SetCaption; property RasterX: integer read FRasterX write FRasterX; property RasterY: integer read FRasterY write FRasterY; end;
Delphi-Quellcode:
"UpdateTransitions" führt im Grunde das gleiche aus, nur ohne "UpdateTransitions". Ich will ja keine Endlosschleifen :-D.
procedure TTile.SetCaption(TerrainName: string);
var TransitionValue: integer; TestBmp: TAdBitmap; begin FCaption := TerrainName; raster[FRasterX, FRasterY] := TerrainName; Image := AdImageList1.Find(TerrainName); if FCaption = 'grass' then begin TransitionValue := GetTransitionNumber; Image := TextureImageList.Find(TerrainName + '_' + IntToStr(TransitionValue)); { Lädt zuerst rohe Maske mit Hilfe eines Sprites und speichert sie in Mask -> Rohe Grastextur wird in ImageBmp gespeichert -> Alpha-Kanal wird von der Maske auf die Grastextur übertragen -> alte Tile-Textur wird durch Neue ersetzt } Image := TextureImageList.Find(FCaption + '_15'); MaskObject.Image := TextureImageList.Find('mask_grass_' + IntToStr(TransitionValue)); MaskObject.Image.Texture.SaveToGraphic(Mask); Image.Texture.SaveToGraphic(ImageBmp); Mask.AssignAlphaChannel(ImageBmp); Image.Texture.Texture.LoadFromBitmap(ImageBmp, ad32bit); if RasterY - 1 >= 0 then TileMap[RasterX, RasterY - 1].UpdateTransitions; if RasterY + 1 <= 63 then TileMap[RasterX, RasterY + 1].UpdateTransitions; if RasterX - 1 >= 0 then TileMap[RasterX - 1, RasterY].UpdateTransitions; if RasterX + 1 <= 63 then TileMap[RasterX + 1, RasterY].UpdateTransitions; end; end; Aber irgendwas muss ich da doch noch übersehen haben... Edit: Ich hab nochmal ein Bild davon angehängt, vielleicht wird es damit etwas klarer. Auf dem Bild kann man die Veränderung sehen, wenn ich Gras auf eine Stelle der Karte setze. Für das neue Quadrat ist die Textur richtig, aber warum ändert der das bei den anderen Quadraten auch? Aus irgendeinen Grund müssen dann doch alle Tiles fälschlicherweise auf die selbe Variable zugreifen... |
AW: [Andorra 2D] Masken bei Texturen - Seltsamer Bug
*push*
Hat niemand ne Idee? |
AW: [Andorra 2D] Masken bei Texturen - Seltsamer Bug
Auch wenn hier bis jetzt niemand geantwortet hat, ich schreib hier mal trotzdem hin, was ich rausbekommen hab. Könnte ja mal interessant für andere werden...
Der (Denk-)Fehler lag schon ganz am Anfang bei der Erstellung des Objekts.
Delphi-Quellcode:
Hier wird nämlich keine Kopie, sondern nur ein Zeiger weitergegeben, weshalb man die Textur aller Objekte gleich mitverändert.
With TestTile do
begin Image := AdImageList1.Find('EmptyTile'); // <----- X := 200; Y := 200; Z := 50004; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 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