AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia [Andorra 2D] Masken bei Texturen - Seltsamer Bug
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra 2D] Masken bei Texturen - Seltsamer Bug

Ein Thema von Acuaplano · begonnen am 28. Sep 2013 · letzter Beitrag vom 14. Okt 2013
Antwort Antwort
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#1

[Andorra 2D] Masken bei Texturen - Seltsamer Bug

  Alt 28. Sep 2013, 02:12
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 ( Thread ) und etwas rumprobieren hab ich's dann auch geschafft. Als ich das ganze dann für mehr als 1 Objekt machen wollte, hat's angefangen zu spinnen und jedes mal, wenn ich bei einem Tile, die Textur (im Sinne von Texturübergang ) geändert habe ( Prozedur unten ), haben alle anderen Tiles genau die selbe Textur angenommen. Dabei gehören die Variablen/Objekte, die benutzt werden, eigentlich alle zu jeweils einem Tile

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:
procedure TTile.SetCaption(TerrainName: string);
var
  TransitionValue: integer;
  TestBmp: TAdBitmap;
begin
    FCaption := TerrainName;
    raster[FRasterX, FRasterY] := TerrainName;
    Image := AdImageList1.Find(TerrainName);
    if FCaption = 'grassthen
    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;
"UpdateTransitions" führt im Grunde das gleiche aus, nur ohne "UpdateTransitions". Ich will ja keine Endlosschleifen .
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...
Miniaturansicht angehängter Grafiken
bug-mapeditor.jpg  

Geändert von Acuaplano (29. Sep 2013 um 00:23 Uhr)
  Mit Zitat antworten Zitat
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#2

AW: [Andorra 2D] Masken bei Texturen - Seltsamer Bug

  Alt 30. Sep 2013, 16:57
*push*

Hat niemand ne Idee?
  Mit Zitat antworten Zitat
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#3

AW: [Andorra 2D] Masken bei Texturen - Seltsamer Bug

  Alt 14. Okt 2013, 14:23
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:
With TestTile do
    begin
      Image := AdImageList1.Find('EmptyTile'); // <-----
      X := 200;
      Y := 200;
      Z := 50004;
    end;
Hier wird nämlich keine Kopie, sondern nur ein Zeiger weitergegeben, weshalb man die Textur aller Objekte gleich mitverändert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz