![]() |
AW: Geschwindigkeit umkehren
:cyclops:
Random für x und für y ... ok, dann weißt Du ja wo Du hinfassen musst, wobei gegen eine zufällige Positionierung nichts spricht solange Du weißt worauf sich x und y beziehen ... (z.B. top/left, center ...) |
AW: Geschwindigkeit umkehren
Zitat:
Zeichne deine Kreise und deine Objekte, beschrifte sie, zeichne Pfeile, gepunktete Linien um Bewegungen darzustellen ... Zitat:
Wenn du also eine Kollision rechts vom Objekt feststellen willst, muss du X + Breite addieren und prüfen, ob sie >= dem X-Wert des Kollisionsobjekts sind. Wenn du auf eine Kollision links vom Objekt prüfen willst, musst du schauen, ob der X-Wert des Kollisionsobjekts + Breite des Kollisionsobjekts <= dem X-Wert deines Objekts sind. Denn einem normalen Sprite-Objekt liegt in der Regel immer ein Quadrat zu Grunde, mit dem man arbeitet, auch wenn es einen Kreis darstellt (der Kreis wird dann in das Quadrat gezeichnet). |
AW: Geschwindigkeit umkehren
So also da bin ich wieder und habe mich direkt mal an die Arbeit gemacht.
X und Y werden wie folgt beschrieben:
Delphi-Quellcode:
Nun zeigen die beiden ja die Position genau so an, wie es notwendig wäre. Wieso funktioniert es nun trotzdem nicht bzw. wieso prallt der Ball mit Bummis Sourcecode falsch ab und bugt rum
for b := 0 to high(Kreis) do
begin Kreis [b].x := Kreis [b].x + Kreis [b].speedx; //Geschwindigkeit X Kreis [b].y := Kreis [b].y + Kreis [b].speedy; //Geschwindigkeit Y With Kreis [b] do begin Left := Kreis [b].x; Top := Kreis [b].y; end; |
AW: Geschwindigkeit umkehren
pack das ganze doch mal in ein Zip, so stochern wir im Nebel rum ...
|
AW: Geschwindigkeit umkehren
Irgendwie hab ich das Gefühl, dass das Ganze bei dir 'n ziemliches Flickwerk ist. :mrgreen: Daher nochmal der Tipp: Geh dein Projekt und dein Vorhaben nochmal analytisch durch. Denn wenn du nicht weißt, warum und weshalb etwas geht oder nicht geht, dann weil dir selbst nicht klar ist, was da überhaupt passiert. Und da kommt man dahin, wo wir jetzt sind: Unklare Fragestellung durch unklare Problemformulierung, weil du scheinbar selbst den Überblick irgendwie über das Projekt verloren hast. Oder?
1)
Delphi-Quellcode:
Warum 0 to ... und nicht Low(Kreis) to ...?
for b := 0 to high(Kreis) do
2)
Delphi-Quellcode:
Wo wird Width und Height gesetzt?
With Kreis [b] do
begin Left := Kreis [b].x; Top := Kreis [b].y; end; |
AW: Geschwindigkeit umkehren
Liste der Anhänge anzeigen (Anzahl: 1)
Okay alles klar, ich habe den ganzen Kram mal angehängt
|
AW: Geschwindigkeit umkehren
Die Bitmapprobleme hat ja Sir Rufo bereits beantwortet.
Das Klebeproblem lässt sich hierdurch beseitigen, allerdings ist das noch nicht final, da durch die Bedingungen Kollisionen z.B. oben und rechts gleichzeitig gefunden werden, was zu einer optisch nicht nachzuvollziehenden Reflexion führt. Ich habe leider jetzt nicht mehr die Zeit mir eine brauchbare Bedingung zu suchen. Aber wir haben ja genügend Mitstreiter hier ...
Delphi-Quellcode:
if InterSectRect(Stubrect, Kreis[b].BoundsRect, Image3.BoundsRect) and Image3.Visible then // Box
begin if ((Kreis[b].y + Kreis[b].Height) > Image3.top) or (Kreis[b].y <= (Image3.top + Image3.Height)) then Kreis[b].speedy := -Kreis[b].speedy; if ((Kreis[b].x + Kreis[b].Width) > Image3.left) or (Kreis[b].x <= (Image3.Left + Image3.Width)) then Kreis[b].speedx := -Kreis[b].speedx; end; Kreis[b].x := Kreis[b].x + Kreis[b].speedx; Kreis[b].y := Kreis[b].y + Kreis[b].speedy; |
AW: Geschwindigkeit umkehren
Danke trotzdem für die ganze Mühe :-D
Mit diesem Code funktoniert die Kollision leider nicht wie gewollt (altes Problem, Einfallswinkel=Einfallswinkel) und manchmal bleibt ein Kreis hängen. Aber ich bin schon ein Stück weiter, danke dafür. Haben die Anderen den vielleicht noch Ideen, dass zu realisieren? Ist wichtig und sollte bis Montag fertig sein, wenn möglich |
AW: Geschwindigkeit umkehren
Den elastischen Stoß hab' ich hier mal gepostet:
![]() Gruß Thomas |
AW: Geschwindigkeit umkehren
@Bjoerk: So ganz blicke ich bei dem Code noch nicht durch. Mit Matrizen habe ich mich noch nicht beschäftigt
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 Uhr. |
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-2025 by Thomas Breitkreuz