Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Kreis soll an Wand abprallen
paderborner - Mo 16.03.09 17:11
Titel: Kreis soll an Wand abprallen
Hallo,
hab da mal ne Frage: ich bin gerade am schreiben eines Mini-Programmes, wo ein Kreis sich in der Mitte befindet. Diesen kann man durch Buttons in 8 verschiedene Richtungen steuern. Ich habe dort einen Timer eingebaut, damit sich das ganze automatisch bewegt, sobald ich auf einen der Buttons klicke.
Wenn der Kreis nun am z.B linken Enden der Wand angekommen ist, soll er dort aprallen und wieder in die andere Richtung zurück gehen. Doch leider funktioniert das nicht so ganz. Der Kreis geht zwar zur linken Seiten, bleibt dort aber hängen und kommt nicht wieder zurück. Hier der Code für den Timer:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Timer1Timer(Sender: TObject); begin kreis.left := kreis.Left + x; kreis.top := kreis.top + y; if kreis.left <0 then kreis.left := x *(-1); end; |
Was kann ich also jetzt machen, dass der Ball wieder zurückkommt?
Mfg
paderborner
Moderiert von
Narses: B- durch Delphi-Tags ersetztModeriert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mo 16.03.2009 um 16:13
Zorro - Mo 16.03.09 17:28
Wenn x positiv ist - wovon ich ausgehe - dann wird (-x) - also x * -1 stets negativ sein.
Darüber hinaus "addierst" du die Gegenrichtung ja nicht, sondern weist sie der Eigenschaft left als direkten Wert zu.
Greetz
Zorro
paderborner - Mo 16.03.09 17:36
Zorro hat folgendes geschrieben : |
Wenn x positiv ist - wovon ich ausgehe - dann wird (-x) - also x * -1 stets negativ sein.
Darüber hinaus "addierst" du die Gegenrichtung ja nicht, sondern weist sie der Eigenschaft left als direkten Wert zu.
|
Da geb ich dir Recht. Wie kann ich es dann erreichen, dass der Kreis zurückkommt. Sorry, wenn ich frage: kenn mich mit der ganzen Geschichte jetzt noch nicht so lange aus...
jaenicke - Mo 16.03.09 17:44
Du musst den Wert von x und y, also den Änderungen umkehren. Wenn du an der Wand angekommen bist, dann muss der Ball das nächste Mal nicht +5 z.B. weiter, sondern +(-5) = -5 weiter, also zurückprallen.
Also ändere nicht den Wert von Left, sondern den der Veränderung in x- bzw. y-Richtung.
JayEff - Mo 16.03.09 17:48
Wenn ich deinen Code richtig interpretiere, ist bei dir "x" die Geschwindigkeit in horizontaler Richtung. Wenn du diese Komponente des Geschwindigkeitsvektors umkehrst, erhälst du eine Bewegung in die Gegenrichtung. (das ist das, was jaenicke gesagt hat ;) )
Für solche Fragen könnte man mal einen FAQ-Eintrag machen, das wäre sicherlich gern gesehen ...
Ich weiß jetzt nicht, ob du dich mit dem Thema Vektoren auskennst, aber falls nicht, solltest du dir vielleicht mal ein bisschen Wissen auf Wikipedia anlesen, denn wenn man sich in der Richtung auskennt, hat man beim Thema gesteuerte Bewegung große Vorteile :zustimm:
paderborner - Mo 16.03.09 19:18
Hey!! Cool! Es geht jetzt! Danke für Eure Tipps. Echt! 8) 8)
Mfg
paderborner
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!