![]() |
Andorra 2D Border
Hallo,
ich möchte gerne eine Umrandung um ein Sprite machen. In AdDraw macht man das ja mit Canvas, diese Eigentschaft gibt es aber leider nicht in Sprites. Kann mir da vielleicht einer weiterhelfen? Edit: Hab das jetzt schon gefunden:
Delphi-Quellcode:
Nur funktioniert das nicht so wie ich mir das vorstelle.
TSprite.Engine.Surface.Canvas
Das Rechteck was gezeichnet wird, wird auf die SpriteEnginge gezeichnet. Es soll aber direkt auf mein Sprite. Also wenn sich das Sprite verschiebt soll das Rechteck auch über dem Sprite bleiben. |
Re: Andorra 2D Border
Tipp:
TSprite.BoundsRect: Beeinhaltet die aktuellen Bildschirmkoordinaten des Sprites. |
Re: Andorra 2D Border
Hmm ich habs jetzt so:
Delphi-Quellcode:
Aber wenn ich näher ran Zoome dann funktioniert das nicht mehr, dann ist das Rechteck zu groß.
with Selected.Engine.Surface.Canvas do
begin //Zeichnet eine weiße Linie von (0;0) zu (100;100). Pen.Color := Ad_ARGB(255,255,255,255); MoveTo(Selected.BoundsRect.Left,Selected.BoundsRect.Top); LineTo(Selected.BoundsRect.Left,Selected.BoundsRect.Top+round(Selected.Height)); LineTo(Selected.BoundsRect.Left+round(Selected.width),Selected.BoundsRect.Top+round(Selected.Height)); LineTo(Selected.BoundsRect.Left+round(Selected.width),Selected.BoundsRect.Top); LineTo(Selected.BoundsRect.Left,Selected.BoundsRect.Top); end; Gibt keine Funktion die so einen Rahmen automatisch macht? Edit: Und wenn ich mein Sprite zu weit nach links ziehe dann sitzt das rechteck auch nicht mehr genau drauf sondern ein wenig nach rechts verschoben. |
Re: Andorra 2D Border
Warum nicht einfach:
Delphi-Quellcode:
with Engine.Surface.Canvas do
begin Rectangle(BoundsRect); Release; end; |
Re: Andorra 2D Border
Kriege ich nur den Fehler Es gibt keine überladene Version die mit Reactangle....
Also kurz ich muss dort einzeln die X, Y, X2 und Y2 Achsen angeben. Also irgendwas ist da mit dem Zoom nicht ganz richtig, wenn ich zoome dann funktioniert auch AdSpriteEngine.GetSpriteAt(X,Y) nicht mehr so wie es soll. Wie kann ich das alles umrechnen, dass das mit dem Zoom funktioniert? |
Re: Andorra 2D Border
Wenn du TSpriteEngineEx verwendest, dann gibt es in dieser Klasse eine nette Funktion, die Bildschirmkoordinaten in Mauskoordinaten umändert. Schau einfach mal in die "Bounce" Demo.
|
Re: Andorra 2D Border
So bin gerade drin in der Demo, das hilft mir aber nicht wirklich weiter.
Ich denke aber mal du redest davon:
Delphi-Quellcode:
Kannst du mir nicht direkt Code geben, damit ich mein Problem lösen kann?
p := AdSpriteEngine.ScreenPointToSpriteCoords(AdPoint(X,Y));
|
Re: Andorra 2D Border
Ich hab jetzt ne Lösung gefunden:
Delphi-Quellcode:
Das Problem ist der Rahmen wird nicht richtig gezeichnet.
procedure TTexture.DoDraw;
begin if (Selected <> nil) and (Selected is TTexture) then begin with Engine.Surface.Canvas do begin Rectangle(BoundsRect); Release; end; end; inherited DoDraw; end; Z.b. wird nur am linken rand ne weiße Linie gezeichnet und wenn ich dann das ganze bild ein wenig bewege dann wird es kommplett angezeigt. Und noch nen Stückchen bewegen und es wird nur am rechten rand ne Linie angezeigt. Ich bewege mich durch die Welt so:
Delphi-Quellcode:
var
p:TAdPoint; begin if ssLeft in Shift then begin begin p := AdSpriteEngine.ScreenPointToSpriteCoords(AdPoint(X,Y)); AdSpriteEngine.X := AdSpriteEngine.X + p.x - lx; AdSpriteEngine.Y := AdSpriteEngine.Y + p.y - ly; Edit1.Text:=inttostr(round(AdSpriteEngine.X)); Edit2.Text:=inttostr(round(AdSpriteEngine.Y)); Lx := p.x; Ly := p.y; end; end; |
Re: Andorra 2D Border
Rufe "Inherited DoDraw" auf bevor du deinen Rahmen zeichnest. So wird der Rahmen ja von deinem Sprite verdeckt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 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