Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [Andorra 2D] TPhysicalBoxSprite bei X=0 unsichtbar (https://www.delphipraxis.net/124140-%5Bandorra-2d%5D-tphysicalboxsprite-bei-x%3D0-unsichtbar.html)

bigben37 15. Nov 2008 11:55


[Andorra 2D] TPhysicalBoxSprite bei X=0 unsichtbar
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo DPler,

ich befasse mich gerade mit den PhysicalSprites von Andorra 2D und da ist mir etwas seltsames aufgefallen:
Ich wollte einen Raum mit Wänden, die PhysicalBoxSprites sind, erstellen. Wenn ich diesen Sprites 0-Koordinaten zuweise (also x := 0), dann sind sie unsichtbar. Aber trotzdem finden eine Kollision statt :gruebel:

Mein Code:
Delphi-Quellcode:
type
  TWall = class(TPhysicalBoxSprite);

  TBottom = class(TWall);
  TLeftWall = class(TWall);
  TRightWall = class(TWall);
  TTop = class(TWall);

implementation

procedure TForm1.FormCreate(Sender: TObject);
 
  [...]

if AdDraw.Initialize then
  begin

    [...]

    with TTop.Create(SpriteEngine) do
      begin
        Image := ImageList.Find('wall');
        X := 0{ + 1};
        Y := 0{ + 1};
        Typ := ptStatic;
        Width := 800;
        InitializeShape;
      end;

    with TBottom.Create(SpriteEngine) do
      begin
        Image := ImageList.Find('wall');
        X := 0{ + 1};
        Y := 600 - Height;
        Typ := ptStatic;
        Width := 800;
        InitializeShape;
      end;


    for i := 0 to 600 div 50 do    
      begin
        with TLeftWall.Create(SpriteEngine) do
          begin
            Image := ImageList.Find('wall');
            X := 0{ + 1};
            Y := i * 50;
            Typ := ptStatic;
            InitializeShape;
          end;
      end;

    for i := 0 to 600 div 50 do
      begin
        with TRightWall.Create(SpriteEngine) do
          begin
            Image := ImageList.Find('wall');
            X := 780;
            Y := i * 50;
            Typ := ptStatic;
            InitializeShape;
          end;
      end;

  end;
end;
Wenn man den Sprites aber 1 statt 0 zuweist (in den geschweiften Klammern), sind sie wieder sichtbar. Allerdings ist dann ein 1-Pixel breiter Streifen oben und links zu sehen.

Und jetzt meine Frage :mrgreen: : Wieso ist das so?

PS: Ich habe die Demo Physics neu kompiliert, und dort wird der Boden auch nicht mehr angezeigt. :glaskugel:

MFG, Benjamin

igel457 15. Nov 2008 13:17

Re: [Andorra 2D] TPhysicalBoxSprite bei X=0 unsichtbar
 
Ich habe das Problem reproduzieren können. Ich schaue mal, ob ich es beheben kann.

igel457 15. Nov 2008 13:36

Re: [Andorra 2D] TPhysicalBoxSprite bei X=0 unsichtbar
 
Problem gefunden: In der Unit AdSprites.TImageSpriteEx muss folgender Codeblock ausgetauscht werden:

Delphi-Quellcode:
procedure TImageSpriteEx.DoDraw;
begin
  if FImage <> nil then
  begin  
    FImage.Color := FColor;
    if Alpha <> 255 then
    begin
      if Angle <> 0 then
      begin
        FImage.DrawRotateAlpha(Engine.Surface,
          round(WorldX), round(WorldY),
          round(Width), round(Height),
          Trunc(AnimPos),
          FRotationCenterX, FRotationCenterY, Round(Angle), Round(Alpha));
      end
      else
      begin
        FImage.DrawAlpha(Engine.Surface,BoundsRect,Trunc(AnimPos),Round(Alpha));
      end;
    end
    else
    begin
      if Angle <> 0 then
      begin
        FImage.DrawRotate(Engine.Surface,
          round(WorldX), round(WorldY),
          round(Width), round(Height),
          Trunc(AnimPos),
          FRotationCenterX, FRotationCenterY, Round(Angle));
      end
      else
      begin
        FImage.StretchDraw(Engine.Surface, BoundsRect, Trunc(AnimPos));
      end;
    end;
  end;
end;

//Vorher noch im "Protected" Bereich von TImageSpriteEx eintragen:
//...
//protected
//  procedure DoDraw;override;
//  procedure DoMove(ATimeGap: double);override;
//...

procedure TImageSpriteEx.DoMove(ATimeGap: double);
begin
  inherited;

  if FChangedRotation then
  begin
    RecalcBoundsRect;
    FChangedRotation := false;
  end;
end;

bigben37 15. Nov 2008 13:51

Re: [Andorra 2D] TPhysicalBoxSprite bei X=0 unsichtbar
 
Super, funktioniert einwandfrei! :thumb: :dancer2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 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