Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Kreise sollen von Wänden abprallen, tun sie aber nicht (https://www.delphipraxis.net/170021-kreise-sollen-von-waenden-abprallen-tun-sie-aber-nicht.html)

DeddyH 26. Aug 2012 18:28

AW: Kreise sollen von Wänden abprallen, tun sie aber nicht
 
ntop und nleft sind die Positionen, die nach einer ungeprüften Bewegung angenommen würden. Und was sind denn wohl die Minimalwerte für Left und Top, die Deine Kreise annehmen dürfen? Kleiner Tipp: das ist bei beiden das Gleiche und könnte als Konstante mit Namen ZERO deklariert werden.

Premaider 26. Aug 2012 18:36

AW: Kreise sollen von Wänden abprallen, tun sie aber nicht
 
Zitat:

Zitat von DeddyH (Beitrag 1180000)
ntop und nleft sind die Positionen, die nach einer ungeprüften Bewegung angenommen würden. Und was sind denn wohl die Minimalwerte für Left und Top, die Deine Kreise annehmen dürfen? Kleiner Tipp: das ist bei beiden das Gleiche und könnte als Konstante mit Namen ZERO deklariert werden.

Null, aber ich krieg das irgendwie nicht realisiert. Entweder bewegt sich garnichts mehr oder es wabbelt einfach nur rum oder es prallt nicht ab.

DeddyH 26. Aug 2012 18:43

AW: Kreise sollen von Wänden abprallen, tun sie aber nicht
 
Wenn Left < 0 oder (Left + Width) > Form.ClientWidth wird, Richtung umkehren, das Gleiche analog für die Y-Achse.

Premaider 26. Aug 2012 18:46

AW: Kreise sollen von Wänden abprallen, tun sie aber nicht
 
Zitat:

Zitat von DeddyH (Beitrag 1180007)
Wenn Left < 0 oder (Left + Width) > Form.ClientWidth wird, Richtung umkehren, das Gleiche analog für die Y-Achse.

So?
Delphi-Quellcode:
    // Obere Grenze prüfen

    if ntop > ( 0 + k.Height ) then
      begin
        k.speedy := - k.speedy; // Richtung umdrehen
      end;

    // Linke Grenze prüfen

    if nleft < ( 0 + k.Width ) then
      begin
        k.speedx := - k.speedx; // Richtung umdrehen
      end;
Weil jetzt bewegt es sich nurnoch in x richtung und wackelt hin und her.

DeddyH 26. Aug 2012 18:58

AW: Kreise sollen von Wänden abprallen, tun sie aber nicht
 
Und so?
Delphi-Quellcode:
if (ntop < 0) or (ntop + k.Height > ClientHeight) then
  k.speedy := - k.speedy;
if (nleft < 0) or (nleft + kWidth > ClientWidth) then
  k.speedx := -k.speedx;

Sir Rufo 26. Aug 2012 19:08

AW: Kreise sollen von Wänden abprallen, tun sie aber nicht
 
Mal dir das doch einfach mal auf, dann sieht man das auch besser.

Hier mal ein paar Hinweise:

Mit Top und Left ist die linke, obere Ecke beschrieben. Über die Informationen Width und Height ist es möglich auch die untere und rechte Kante zu bestimmen.

Rechte Kante = Left + Width
Untere Kante = Top + Height

Man kann sich das aber auch anders vorstellen:

Der Bereich, indem sich die linke obere Ecke sich befinden darf ist:
Code:
0 <= Kreis.Top < Form.ClientWidth - Kreis.Width
0 <= Kreis.Left < Form.ClientHeight - Kreis.Height
also
Delphi-Quellcode:
if ntop >= Self.ClientHeight - k.Height then
...
if ntop < 0 then
...
if nleft >= Self.ClientWidth - k.Width then
...
if nleft < 0 then
...
Zitat:

Zitat von DeddyH (Beitrag 1180010)
Und so?
Delphi-Quellcode:
if (ntop < 0) or (ntop + k.Height > ClientHeight) then
  k.speedy := - k.speedy;
if (nleft < 0) or (nleft + kWidth > ClientWidth) then
  k.speedx := -k.speedx;

Nicht ganz, denn jetzt passt nur die Anpassung der Richtungen, aber die neue Position muss ja auch noch errechnet werden

Premaider 26. Aug 2012 19:09

AW: Kreise sollen von Wänden abprallen, tun sie aber nicht
 
danke so geht es

Uwe Raabe 26. Aug 2012 19:09

AW: Kreise sollen von Wänden abprallen, tun sie aber nicht
 
Abfrage falsch!

Zitat:

Zitat von Premaider (Beitrag 1180008)
Delphi-Quellcode:
    // Obere Grenze prüfen

    if ntop > ( 0 + k.Height ) then // Falsch herum!
      begin
        k.speedy := - k.speedy; // Richtung umdrehen
      end;



Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz