Re: "eXtreme Towerdefence" - Trum Radios ?
Delphi-Quellcode:
So habe ich das jetzt allerdings ist r viel zu hoch.... muss ich mit r noch irgendwas machen ?
procedure TForm1.Timer1Timer(Sender: TObject);
var r:Real; begin if s1.Visible then begin r:=(s3.left-s2.Left)*(s3.Top-s2.top); s4.SpriteImage.Canvas.Brush.color:=clRed; s4.SpriteImage.Canvas.FillRect(0,0,100,20); s4.SpriteImage.Canvas.textout(0,0,Format('%f',[r])); s4.DrawSprite; if r <= 6 then begin writeln(sqr(r)); ShotMove; end; end; end;
Delphi-Quellcode:
x1,y1,x2,y2
PS: Wie lautet die Ellipse-Funktion (also mit Parametern, hab grad kein Delphi zur hand)
edit: teilweise geht das schon recht gut:
Delphi-Quellcode:
Allerdings wenn der Gegner von den Ecken kommt, ist die Zahl zu hoch.
procedure TForm1.Timer1Timer(Sender: TObject);
var r:Real; begin if s1.Visible then begin r:=sqr((s3.left-s2.Left)+(s3.Top-s2.top)); s4.SpriteImage.Canvas.Brush.color:=clRed; s4.SpriteImage.Canvas.FillRect(0,0,100,20); s4.SpriteImage.Canvas.textout(0,0,Format('%f',[r])); s4.DrawSprite; if r <= 6 then begin writeln(sqr(r)); ShotMove; end; end; end; |
Re: "eXtreme Towerdefence" - Trum Radios ?
Du musst noch die Wurzel von r ziehen, das geht mit sqrt(r)
Und den Kreis machst du so (M ist ein TPoint und der Mittelpunkt deines Turmes):
Delphi-Quellcode:
Mfg
const Radius=6;
begin Canvas.Ellipse(M.X-Radius,M.Y-Radius,M.X+Radius,M.Y+Radius); end; [Edit]Muss das hier
Delphi-Quellcode:
Nicht so aussehen?
r:=sqr((s3.left-s2.Left)+(s3.Top-s2.top));
Delphi-Quellcode:
[/edit]
r:=sqrt(sqr(s3.left-s2.Left)+sqr(s3.Top-s2.top));
|
Re: "eXtreme Towerdefence" - Trum Radios ?
Delphi-Quellcode:
r:=sqr(s3.left-s2.Left) + sqr(s3.Top-s2.top);
... if sqrt(r) <= 6 then //oder if r <= 36 then |
Re: "eXtreme Towerdefence" - Trum Radios ?
Delphi-Quellcode:
so recht geht das noch nicht weil sqr(t)
procedure TForm1.Timer1Timer(Sender: TObject);
var t:Real; begin if s1.Visible then begin t:=sqr(s1.left-s2.Left) + sqr(s1.Top-s2.top); ; s4.SpriteImage.Canvas.Brush.color:=clRed; s4.SpriteImage.Canvas.FillRect(0,0,100,20); s4.SpriteImage.Canvas.textout(0,0,Format('%f',[t])); s4.DrawSprite; if sqr(t) <= 6 then begin ShotMove; end; end; end; viel zu hoch ist. was mache ich falsch ? Vorhin hatte ich mich vertan s1 ist der Gegner s3 ist der Schuss *G* vom Turm. oder sollte ich abs einsetzten(abs(s1.left-s2.left) ? @Fussball-Robby so bekomme ich werte über 1000 |
Re: "eXtreme Towerdefence" - Trum Radios ?
Die Verbesserungen von mir und xX0815Xx müssten aber funktionieren. Und ABS brauchst du nicht, da beim quadrieren IMMER eine positive Zahl rauskommt.
Mfg [Edit]Ich sehe grade, es heißt nicht
Delphi-Quellcode:
sondern
if sqr(t) <= 6 then begin
Delphi-Quellcode:
.
if sqrt(t) <= 6 then begin
Sqr rechnet hoch 2, Sqrt zeiht die Wurzel. |
Re: "eXtreme Towerdefence" - Trum Radios ?
Delphi-Quellcode:
Das Muss sqrt() heißen, da das die Wurzel zieht. Sqr() quadriert das ja :D
if sqr(t) <= 6
Sowas passiert mir auch oft... |
Re: "eXtreme Towerdefence" - Trum Radios ?
kommt der sache schon nährer. Die zahlen liegen jetzt unter 100.
Also ist 5 zu klein. Wenn ich es richtig verstehe. ich habe versuch den mittelpunkt zu berechnen und zwar so:
Delphi-Quellcode:
aber das scheint keine Auswirkung zu haben
mx1:=s1.left+(s1.Width div 2);
my1:=s1.top+(s1.Height div 2); mx2:=s2.left+(s2.Width div 2); my2:=s2.top+(s2.Height div 2); t:=sqr(mx1-mx2)+sqr(my1-my2); s4.SpriteImage.Canvas.Brush.color:=clRed; s4.SpriteImage.Canvas.FillRect(0,0,100,20); s4.SpriteImage.Canvas.textout(0,0,Format('%f',[sqrt(t)])); s4.DrawSprite; if sqrt(t) <= 6 then begin ShotMove; end; Aufjeden Fall vielen dank schonmal an alle die mir geholfen haben. |
Re: "eXtreme Towerdefence" - Trum Radios ?
Zitat:
|
Re: "eXtreme Towerdefence" - Trum Radios ?
BESTEN DANK ES GEHT. Ich musste nur den Radios anpassen.
Der Kreis wird jetzt auch angezeigt. Zitat:
Delphi-Quellcode:
so sieht jetzt die ganze Procedure aus
procedure TForm1.Timer1Timer(Sender: TObject);
const Radius=100; var t:Real; mx1,my1,mx2,my2:Integer; begin if s1.Visible then begin mx1:=s1.left+(s1.Width div 2); my1:=s1.top+(s1.Height div 2); mx2:=s2.left+(s2.Width div 2); my2:=s2.top+(s2.Height div 2); t:=sqr(mx1-mx2)+sqr(my1-my2); engine.OutCanvas.Brush.Style:=bsClear; engine.OutCanvas.Ellipse(mx2-Radius,my2-Radius,mx2+Radius,my2+Radius); // t:=sqr(s1.left-s2.Left) + sqr(s1.Top-s2.top); s4.SpriteImage.Canvas.Brush.color:=clRed; s4.SpriteImage.Canvas.FillRect(0,0,100,20); s4.SpriteImage.Canvas.textout(0,0,Format('%f',[sqrt(t)])); s4.DrawSprite; if sqrt(t) <= Radius then begin ShotMove; end; end; end; |
Re: "eXtreme Towerdefence" - Trum Radios ?
Gut, das es jetzt klappt. Ich würde aber die Variablen mx1,mx2,my1,my2 durch 2 TPoints ersetzen. Das sähe dann so aus:
Delphi-Quellcode:
Mfg
[...]
const Radius=100; var t:Real; M1,M2:TPoint; begin if s1.Visible then begin M1.X:=s1.left+(s1.Width div 2); M1.Y:=s1.top+(s1.Height div 2); M2.X:=s2.left+(s2.Width div 2); M2.Y:=s2.top+(s2.Height div 2); t:=sqr(M1.X-M2.X)+sqr(M1.Y-M2.Y); [...] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 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