![]() |
Ballflug bei Tennisspiel
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich bin gerade dabei ein kleines Tennisspiel zu programmieren und stehe vor dem ersten Problem. Das Spiel soll in einer 2D-Perspektive programmiert werden. Nun bin ich gerade dabei den Ballflug zu realisieren. Eine einfache 2D-Verschiebung (im Bild die rote Linie) funktioniert da ja nicht. Meine Frage ist nun, wie ich die im Bild blau markierte Linie anhand Start- und Zielpunkt berechnet bekomme. Wäre nett, wenn mir da jemand helfen könne. Danke. |
Re: Ballflug bei Tennisspiel
Die Perspektive, die du da hast, ist aber nicht wirklich 2D, oder? ;)
Das einfachste dürfte wohl sein, wenn du schlichtweg die 3. Dimension mit reinnimmst und die Höhe mitberechnest. Eine wirkliche 2D-Perspektive wäre, wenn du direkt von oben drauf schaust. :) air |
Re: Ballflug bei Tennisspiel
Die Perspektive ist nicht 2D aber trotzdem wird das Spiel 2D gezeichnet. Ist ein ähnliches Prinzip wie bei einer ISO-Engine.
Für eine dritte Dimension muss ich ja ein 3D-Objekt erstellen. Möchte aber wenn´s geht bei 2D bleiben. Vielleicht kennt jemand Spiele wie Smash Court Tennis auf dem SNES früher. Das war auch komplett 2D...also möglich scheint es ja zu sein ;) |
Re: Ballflug bei Tennisspiel
Ich sehe da eine Moeglichkeit:
Du zeichnest alles 2D, die Ballflugberechnung laeuft im Hintergrund aber in 3D. Sprich: Der Ball erhaelt eine z-Koordinate. Abhaengig der 3D-Position des Balles, und des Blickwinkels kannst du dir dann die Position von 3D auf 2D umrechnen, und damit dann zeichnen. Einen anderen Ausweg, der das halbwegs elegant und flexibel erledigt seh ich im Moment nicht... greetz Mike |
Re: Ballflug bei Tennisspiel
Zitat:
Zitat:
|
Re: Ballflug bei Tennisspiel
weißt du, wie man eine parabelförmige flugbahn berechnet? solltest du im inet überall finden.
Zur Umrechnung würde ich einfach zur y-koordinate die z-Koordinate mal einen bestimmten faktor dazurechnen... einfach ausprobieren, was für ein faktor da am besten passt. ansonsten kann man das auch sicher exakt berechnen... irgendwas trinagulares oder so... :gruebel: |
Re: Ballflug bei Tennisspiel
Zitat:
Im Eigentlichen reicht dir diese Formel:
Code:
(EyePos und BallPos sind Vektoren, die die X, Y und Z-Position von Ball und Auge beinhalten ;))
BallPos - (EyePos - BallPos) * (BallPos.Z / (EyePos.Z - BallPos.Z));
Ok, ein bisschen zur Erklaerung: Stell dir einen Strahl vor, der bei deinem Auge startet und durch den Ball geht. Dort, wo der Strahl deinen "Tennisplatz" trifft, musst du den Ball zeichnen. Das zu berechnen ist am end nur Geometrie. (Falls ich dir des genauer erklaeren soll meld dich einfach ;)) Das Ergebnis ist wiederum ein 3D-Vektor. Allerdings ist dessen Z-Komponente immer 0 (bzw. sollte sie zumindest sein ^^), d.h. den kann man dann fast schon als 2D-Vektor betrachten, denn in X und Y stehen die Koordinaten, wo du den Ball zeichnen musst :) Uebrigens: Das Prinzip funktioniert auch mit deinem Schatten: Die Sonne ist der Ausgangspunkt deines Strahles, der wieder durch den Ball verlaeuft. Dort, wo dieser Strahl den Boden trifft, muss der Schatten hin. Is doch einfach, oder? :D greetz Mike |
Re: Ballflug bei Tennisspiel
Zitat:
Also laut deiner Erklärung wäre ja doch die rote Linie die Richtige, aber wie man die blaue hinbekommt, ist ja noch offen. Oder meintest du das irgendwie? Das "BallPos" im Anfang deiner Gleichung benötigt ja auch noch einen bestimmten Vektoren oder? Zitat:
|
Re: Ballflug bei Tennisspiel
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich bin inzwischen schon etwas weiter.
Ich habe mir mal die Mühe gemacht und meine Idee aufgezeichnet: Bild nun im Anhang Die lila farbene Linie zeigt den Verlauf des Schattens an, der auf einer Geraden verläuft. Nimmt man die Hälfte dieser Linie (hier die gelbe Linie) so kann man erkennen, dass es sich bei der blauen Linie um eine Parabel handelt. Die beiden schwarzen Eckpunkte sind die Nullstellen. Beispiel hierzu: Die lila farbene Gerade ist 300 Pixel lang. Rechnet man von der Mitte aus, handelt es sich um die Nullstellen x01=-150 und x02=+150. So, und nun bräuchte ich mal wieder eure Hilfe. Was ich weiss...die Parabel hat in meinem Fall die Formel y=-x² und ist nach unten geöffnet. Was ich nicht weiss, ist, wie ich die Parabel zeichnen soll. Welchen Punkt soll ich als Ursprung nehmen? Meine 2.Frage wäre: Wie kann ich anhand der Nullstellen nun die Funktion herausfinden? |
Re: Ballflug bei Tennisspiel
Hi!
Könntest du das Bild den Modem-Usern zum Gefallen und vor allem, um späteren Dead-Links vorzubeugen, anhängen? Danke. Ciao Frederic |
Re: Ballflug bei Tennisspiel
Zitat:
Warum ned live-time-Berechnung der Parabel? A bissl Physik... ;) Folgende Idee: Der Ball hat jetzt ned nur ne 3D-Position, sondern auch eine 3D-Geschwindigkeit :stupid: In die Richtung, in die der Geschwindigkeitsvektor zeigt, wird der Ball Stueck fuer Stueck bewegt. Dabei wird a) der Ball a bissl langsamer (Luftreibung), was aber vernachlaessigbar ist, und b) durch die Gravitation Richtung Erde gezogen. Wenn er am Boden auftrifft, prallt er ab und kann sonstnoch was machen..., und wenn er von einem Spieler geschlagen wird, aendert sich wieder seine Richtung, je nach dem, wohin er den Ball spielen will. So, was hat man von dem Spass? Man kann sagen, wie weit und in welche Richtung man schiessen kann D.h. der Ball kann ins aus, ins Netz, 2x am Boden aufprallen ect. Macht das Game noch interessanter, die Parabel-Frage waere geloest, und eine Anbindung an die oben genannten Moeglichkeiten waeren auch kein Problem mehr. Ausserdem wuerde der Schatten dann auch nicht in ner Geraden Linie verlaufen, was dem ganzen etwas mehr Realismus verpasst ;) greetz Mike |
Re: Ballflug bei Tennisspiel
Zitat:
Zitat:
Zitat:
Zitat:
Also alles in allem könnte ich doch noch etwas Hilfe gebrauchen. Also wenn Interesse besteht, könnt ihr ja mal ne PN schicken... |
Re: Ballflug bei Tennisspiel
Zitat:
Zitat:
Zitat:
Zitat:
greetz Mike |
Re: Ballflug bei Tennisspiel
Okay, also würde das alles am besten funktionieren, wenn man eine Physik-Engine erstellen würde. Gibt es da vielleicht schon fertige, die man mit Delphi verwenden kann?
Vielleicht hat ja auch jemand schonmal ein programmiert und die reicht für meine Ansprüche?! Wenn ja, bitte melden :) |
Re: Ballflug bei Tennisspiel
Es gibt ODE ( Open Dynamics Engine ) und Newton (
![]() |
Re: Ballflug bei Tennisspiel
Die Resonanz war jetzt nicht soooo gut ;) von daher würde ich doch lieber auf die Berechnung einer Parabel zurückgreifen.
Benutzen muss ich, wenn ich das richtig sehe, folgende Formel: y = s * -x² + m s ist die Stauchung und m ist die Verschiebung. In diese Formel muss ich nun aber irgendwie die Erkenntnis mit den Nullstellen einbeziehen, denn es soll ja so sein, dass der Start- und der Endpunkt der "eigentlichen" Ballfluglinie die Nullstellen sind. ICh hoffe mir kann da jemand helfen. |
Re: Ballflug bei Tennisspiel
Nullstellenform einer ganzrationalen funktion:
y = (x-N1)^E1(x-N2)^E2....(x-Nn)^En also bei dir y = a(x-N1)(x-N2) wobei a die stauchung und negativ sein sollte... |
Re: Ballflug bei Tennisspiel
Das sind doch dann aber 2 Unbekannte, denn ich muss die Stauchung und die Verschiebung ausrechnen...
|
Re: Ballflug bei Tennisspiel
Liste der Anhänge anzeigen (Anzahl: 1)
Ich glaube ich habe nun den richtigen Ansatz gefunden. Zumindest sieht das Testprogramm schon mal ansatzweise so aus, wie ich mir eine Ballflugbahn vorstelle. Die Linie lasse ich erstmal automatisch zeichnen. Ich weiss, dass der Code bisher noch nicht alle Linien (in alle Richtungen) berücksichtigt. Ich habe das Programm mal angehängt.
Das Problem ist noch: - die Verschiebung der Flugbahn und - dass die Parabel nicht die Länge der Linie hat Vielleicht könnte sich einer den Code mal etwas näher anschauen und mir Verbesserungsvorschläge geben. Ausreichende Kommentierung ist vorhanden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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