AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia "eXtreme Towerdefence" - Trum Radios ?
Thema durchsuchen
Ansicht
Themen-Optionen

"eXtreme Towerdefence" - Trum Radios ?

Ein Thema von mimi · begonnen am 19. Mär 2008 · letzter Beitrag vom 19. Mär 2008
Antwort Antwort
Seite 2 von 3     12 3      
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#11

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 13:55
Delphi-Quellcode:
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;
So habe ich das jetzt allerdings ist r viel zu hoch.... muss ich mit r noch irgendwas machen ?

PS: Wie lautet die Ellipse-Funktion (also mit Parametern, hab grad kein Delphi zur hand) x1,y1,x2,y2

edit:
teilweise geht das schon recht gut:
Delphi-Quellcode:
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;
Allerdings wenn der Gegner von den Ecken kommt, ist die Zahl zu hoch.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:02
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:
const Radius=6;
begin
  Canvas.Ellipse(M.X-Radius,M.Y-Radius,M.X+Radius,M.Y+Radius);
end;
Mfg


[Edit]Muss das hier
r:=sqr((s3.left-s2.Left)+(s3.Top-s2.top)); Nicht so aussehen?
r:=sqrt(sqr(s3.left-s2.Left)+sqr(s3.Top-s2.top)); [/edit]
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#13

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:03
Delphi-Quellcode:
r:=sqr(s3.left-s2.Left) + sqr(s3.Top-s2.top);
...
if sqrt(r) <= 6 then
//oder if r <= 36 then
Jonas
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#14

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:07
Delphi-Quellcode:
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;
so recht geht das noch nicht weil sqr(t)
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
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:12
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    if sqr(t) <= 6 then begin sondern    if sqrt(t) <= 6 then begin .
Sqr rechnet hoch 2, Sqrt zeiht die Wurzel.
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#16

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:12
if sqr(t) <= 6 Das Muss sqrt() heißen, da das die Wurzel zieht. Sqr() quadriert das ja

Sowas passiert mir auch oft...
Jonas
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#17

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:16
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:
 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;
aber das scheint keine Auswirkung zu haben

Aufjeden Fall vielen dank schonmal an alle die mir geholfen haben.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:18
Zitat von mimi:
Also ist 5 zu klein. Wenn ich es richtig verstehe.
Ja, du verstehst es richtig. 5 - Das sind auf denm Bildschirm ca. 3 Milimeter
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#19

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:23
BESTEN DANK ES GEHT. Ich musste nur den Radios anpassen.

Der Kreis wird jetzt auch angezeigt.

Zitat:
Ja, du verstehst es richtig. 5 - Das sind auf denm Bildschirm ca. 3 Milimeter
Ja habe ich gesehen als ich den Kreis gezeichnet habe. das 5 wohl etwas zu wenig sind, ich habe jetzt 100.
Delphi-Quellcode:
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;
so sieht jetzt die ganze Procedure aus
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: "eXtreme Towerdefence" - Trum Radios ?

  Alt 19. Mär 2008, 14:27
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:
[...]
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);
[...]
Mfg
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 22:19 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