AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Andorra 2D Border

Ein Thema von XXcD · begonnen am 5. Aug 2008 · letzter Beitrag vom 6. Aug 2008
Antwort Antwort
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#1

Andorra 2D Border

  Alt 5. Aug 2008, 16:30
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:
TSprite.Engine.Surface.Canvas Nur funktioniert das nicht so wie ich mir das vorstelle.
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.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Andorra 2D Border

  Alt 5. Aug 2008, 16:47
Tipp:

TSprite.BoundsRect: Beeinhaltet die aktuellen Bildschirmkoordinaten des Sprites.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Andorra 2D Border

  Alt 5. Aug 2008, 17:01
Hmm ich habs jetzt so:

Delphi-Quellcode:
    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;
Aber wenn ich näher ran Zoome dann funktioniert das nicht mehr, dann ist das Rechteck zu groß.
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.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Andorra 2D Border

  Alt 5. Aug 2008, 17:15
Warum nicht einfach:
Delphi-Quellcode:
with Engine.Surface.Canvas do
begin
  Rectangle(BoundsRect);
  Release;
end;
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Andorra 2D Border

  Alt 5. Aug 2008, 17:22
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?
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Andorra 2D Border

  Alt 5. Aug 2008, 17:29
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.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Andorra 2D Border

  Alt 5. Aug 2008, 17:34
So bin gerade drin in der Demo, das hilft mir aber nicht wirklich weiter.
Ich denke aber mal du redest davon:
p := AdSpriteEngine.ScreenPointToSpriteCoords(AdPoint(X,Y)); Kannst du mir nicht direkt Code geben, damit ich mein Problem lösen kann?
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Andorra 2D Border

  Alt 5. Aug 2008, 19:22
Ich hab jetzt ne Lösung gefunden:

Delphi-Quellcode:
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;
Das Problem ist der Rahmen wird nicht richtig gezeichnet.
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;
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Andorra 2D Border

  Alt 6. Aug 2008, 17:30
Rufe "Inherited DoDraw" auf bevor du deinen Rahmen zeichnest. So wird der Rahmen ja von deinem Sprite verdeckt.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  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 21:14 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