Einzelnen Beitrag anzeigen

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