AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Andorra 2D] Dynamische Textur und Kollision
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra 2D] Dynamische Textur und Kollision

Ein Thema von nuclearping · begonnen am 3. Nov 2013 · letzter Beitrag vom 4. Nov 2013
Antwort Antwort
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

[Andorra 2D] Dynamische Textur und Kollision

  Alt 3. Nov 2013, 16:13
Hallo,

ich erzeuge ein Sprite, wo das Image zur Laufzeit ein Bitmap, was zwei Ellipsen enthält, zugewiesen bekommt:
Delphi-Quellcode:
function TRenderCore.InitializeBackground: Boolean;
var
  Bmp: TBitmap;
  W, H: Integer;
begin
  try
    with TImageSprite.Create(FSpriteEngine) do
      begin
        CanDoCollisions := TRUE;
        X := 0;
        Y := 0;
        Z := -10000;

        Bmp := TBitmap.Create;
        try
          W := FSpriteEngine.ViewPort.Right - 1;
          H := FSpriteEngine.ViewPort.Bottom - 1;

          Bmp.PixelFormat := pf24Bit;
          Bmp.Width := W;
          Bmp.Height := H;
          Bmp.Canvas.Pen.Color := clBlack;
          Bmp.Canvas.Pen.Width := 2;
          Bmp.Canvas.Brush.Color := clWhite;
          Bmp.Canvas.Brush.Style := bsClear;
          Bmp.Canvas.Ellipse(10, 10, Bmp.Width - 10, Bmp.Height - 10);
          Bmp.Canvas.Ellipse(40, 40, Bmp.Width - 40, Bmp.Height - 40);

          Image := FAssetsImageList.Add('Background');
          with Image do
            begin
              Texture.LoadFromGraphic(Bmp);
              Restore;
            end;

          Width := W;
          Height := H;

          CollisionTester := FPixelCollisionTester;
        finally
          FreeAndNil(Bmp);
        end;
      end;
    Result := TRUE;
  except
    Result := FALSE;
  end;
end;
Das funktioniert soweit auch.

Aber das Problem: Wenn ein Objekt, was innerhalb des Kreises erzeugt wird, bei seiner Bewegung mit dem Begrenzungskreis kollidiert, wird DoCollision in diesem Fall nicht aufgerufen.

Ich denke das wird wohl daran liegen, dass Andorra in dem Fall nicht weiß, was als Kollisionsbereich gelten soll, oder?

Wie kann ich also erreichen, dass er auch für solche dynamisch erzeugten Texturen eine Kollisionserkennung durchführt? So als wenn ich TImageSprite.Image ein Objekt aus einer TAdImageList zuweisen würde?

Danke.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: [Andorra 2D] Dynamische Textur und Kollision

  Alt 4. Nov 2013, 12:02
Ok, hab die Lösung gefunden.

1) TImageSprite aus dem Code oben muss natürlich TBackgroundSprite heissen.

2) Ich muss in TBackgroundSprite.DoMove noch Collision aufrufen.

3) Damit das Sprite im Kreis korrekt mit den Rändern kollidiert (und nicht permanent mit dem ganzen Background-Image), muss man beim Erstellen des Kreises einen Umweg über eine TAdBitmap gehen, der man neben dem eigentlich Bild noch eine Alpha-Maske zuweist. Die korrekte Erstellung einer solchen Maske kann man in den Quellen des ImgListEditors sehen.

So klappts auch mit der Kollision.
  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 23:22 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