![]() |
[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:
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.
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; 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 |
Re: [Andorra 2D] TPhysicalBoxSprite bei X=0 unsichtbar
Ich habe das Problem reproduzieren können. Ich schaue mal, ob ich es beheben kann.
|
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; |
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