Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
under_construction Junior JLI'ler
Alter: 36 Anmeldedatum: 12.11.2002 Beiträge: 52
Medaillen: Keine
|
Verfasst am: 19.07.2003, 15:56 Titel: Problem mit Gravitation |
|
|
Hi!
Also ich wollte das mit der Gravitation mal ausprobieren, also
hab ich mir eine Kollisionsroutine aus früheren Versuchen genommen,
die auch ganz gut funktioniert. Nun aber mein Problem:
Mein Algo lautet in etwa wie folgt:
Hauptschleife
{
wenn Speed<0 addiere Gravitation (=0.0000002f) zu Speed;
addiere Speed zur y-Position des Sprites;
Teste die Rechtecke des Sprites und des Bodens auf Kollision;
wenn Kollision aufgetreten
{
negiere Speed;
}
}
Das Problem ist die Gravitation: wenn die wie im Bsp. 0.0000002f ist
springt das Sprite wieder hoch und achtet gar nicht darauf, wenn sie
allerdings größer ist springt das Sprite nicht wieder hoch sondern befindet sich nur noch an der Position der Kollision.
Weiß irgendjemand darauf eine Antwort? |
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 19.07.2003, 16:03 Titel: |
|
|
Ich habe deinen Code nicht ganz verstanden, vielleicht musst du die Gravitation abziehen, größere Werte auf der Y-Achse bedeuten eine Bewegung nach oben ... |
|
Nach oben |
|
|
nEp Junior JLI'ler
Anmeldedatum: 03.06.2003 Beiträge: 75
Medaillen: Keine
|
Verfasst am: 19.07.2003, 17:02 Titel: |
|
|
Solltest dich schon "bissl" genauer ausdrücken..
Bzw hatte glaub ich mal jemand im Projekte Forum so ein kleines gut dokumentiertes Proggie geschrieben, in dem du siehst wie das mit der Gravitation (und Kollision etc geht).
P.S. Ich glaube aber auch dass 0.000000002f sowieso viel zu klein ist.. |
|
Nach oben |
|
|
under_construction Junior JLI'ler
Alter: 36 Anmeldedatum: 12.11.2002 Beiträge: 52
Medaillen: Keine
|
Verfasst am: 19.07.2003, 18:56 Titel: |
|
|
Hi!
@=]Mid[=]Night[=
Zitat: | größere Werte auf der Y-Achse bedeuten eine Bewegung nach oben |
Das stimmt micht ganz, da ich in 2D code und da der Nullpunkt links oen
liegt.
Zur Erklärung:
Speed ist die Bewegung auf der Y-Achse (sowohl negativ als auch positiv)
Das Quadrat fällt runter, ihm wird dabei keine Gravitation hinzugefügt.
Kollidiert es, soll es wieder nach oben springen und diesmal wird
Gravitation hinzugefügt.
@nEp
0.000000002f hab ich mit double gemacht und ich hätt's gar nicht so klein
gemacht, wenn nicht immer der selbe Fehler aufträte (dies übrigens auch bei 0.5f).
Ciao! |
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 19.07.2003, 19:09 Titel: |
|
|
Warum muss denn Speed < 0 sein, damit die Gravitation addiert wird? |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 19.07.2003, 20:53 Titel: |
|
|
Stimmt, korrekterweise sollte Gravitation immer zu Speed addiert werden.
@under_construction:
Zeig doch mal den Code in C++. Vielleicht hat sich ja ein Bug eingeschlichen _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 19.07.2003, 21:10 Titel: |
|
|
ist die Gravitation nicht eigentlich die ~"Geschwindigkeit"? Zumindestens beim freien Fall und ich denke nicht, dass in deinem Spiel irgendeiner einen wo runterschmeißt...
die Gravitation ist doch dann die Beschleunigung des Körpers, also ~9,8m/s²? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 19.07.2003, 21:24 Titel: |
|
|
under_construction hat Folgendes geschrieben: | Das Quadrat fällt runter, ihm wird dabei keine Gravitation hinzugefügt. |
Warum, Gravitation wirkt immer und überall!
under_construction hat Folgendes geschrieben: | Das Problem ist die Gravitation: wenn die wie im Bsp. 0.0000002f ist
springt das Sprite wieder hoch und achtet gar nicht darauf, wenn sie
allerdings größer ist springt das Sprite nicht wieder hoch sondern befindet sich nur noch an der Position der Kollision. |
Ich kenne das Beispiel nicht, aber eine Angabe darüber, welche Werte "speed" und "gravitation" annehmen können wäre hilfreich gewesen. Ich versuchs trotzdem.
So wie Deine Schleife aufgebaut passiert folgendes anhand eines Beispiels:
Speed ist größer Null.
Speed wird in Deiner Schleife solange zu Y hinzuaddiert, bis eine Kollision auftritt. Soweit, sogut!
Bei dieser Kollision wird Speed nun negiert, was beim erneuten Schleifendurchlauf nun die Addition von "Gravitation" zu negativem "Speed" zur Folge hat. Was bedeutet: Der Betrag von Speed wird kleiner
Nun ziehst Du einen kleineren Betrag von Y ab, als Du kurz vorher zu Y addiert hattest !!!
Wenn Dein "Gravitation" nun allerdings so groß war, das Du dadurch immer noch im Bereich einer Kollision bist, dann bleibt Dein Sprite immer an diesem einen Fleck, da durch die erneute Kollision Dein "Speed" abermals negiert wird und nun wieder zu Y addiert wird,trotz Kollision.-->"Zwickmühle"
Bei zu kleiner "Gravitation" gibt es natürlich keine erneute Kollision, aber diese wirkt sich auch nicht merklich auf Deinen "Speed" aus. Daher geht das Sprite hoch, ohne merklich langsamer zu werden!
-------------------------------------------------------------------------------------
Lösung für Dein Problem wäre eine kleine Änderung:
Hauptschleife
{
wenn Speed<0 addiere Gravitation (=nun nicht mehr sooo klein) zu Speed;
addiere Speed zur y-Position des Sprites;
Teste die Rechtecke des Sprites und des Bodens auf Kollision;
wenn Kollision aufgetreten
{
negiere Speed;
addiere Speed zur y-Position des Sprites;
}
}
Nicht sonderlich schön und überhaupt nicht physikalisch korrekt, sollte aber Dein Problem lösen!
mfG |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.07.2003, 00:17 Titel: |
|
|
Wenn die Gravitation zu hoch ist, fällt dein Objekt "in" den Boden und bleibt so drin stecken. Wenn eine Kollision auftritt musst du das Objekt auf den echten Auftreffpunkt zurücksetzen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.07.2003, 08:00 Titel: |
|
|
Berechne doch alles am besten ganz physikalisch!
....._______
v=-| 2g*s
g=9,81m/s²
s= der Abstand von der Erdoberfläche zu dem Massenpunkt deines Körpers
naja und dann kannst du ja deine "Normale Geschwindigkeit" dazu addieren... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 20.07.2003, 08:58 Titel: |
|
|
Hazel hat Folgendes geschrieben: | ...Wenn eine Kollision auftritt musst du das Objekt auf den echten Auftreffpunkt zurücksetzen. |
Wenn schon SO genau, dann GANZ genau ^^
Es reicht nicht nur, das Objekt auf den echten Auftreffpunkt zurückzusetzen, sondern zusätzlich noch um den Betrag ÜBER den Auftreffpunkt zu setzen, der von "Speed" übrig bleibt, wenn man von "Speed" die Differenz zwischen altem "Y"-Wert und Auftreffpunkt abzieht.
@under_construction:
BTW wird allerdings nun zusätzlich noch folgender Fehler auftreten!
Dadurch, das Du Deine Gravitation nur hinzuaddierst, wenn Dein "Speed" negativ ist, wird, wenn das Objekt sich nach oben bewegt ("Speed" ist negativ) solange die "Gravitation" abgezogen, bis Dein "Speed" entweder 0 oder minimal größer 0 ist. Was bewirkt, das nach der Kehrtwende Deines Objektes von Steigen zu Fallen, dieses nur noch ganz langsam fällt oder gar in der Luft stehen bleibt (bei Speed == 0), da Du eben keine Gravitation zu Speed mehr addierst, weil diese ja nun größer Null ist.
Du solltest und musst also die Gravitation auch bei positivem Speed addieren! |
|
Nach oben |
|
|
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 20.07.2003, 09:12 Titel: |
|
|
TheMillenium hat Folgendes geschrieben: | ...v=-| 2g*s
...
s= der Abstand von der Erdoberfläche zu dem Massenpunkt deines Körpers... |
Wenn ich Dich richtig verstanden habe, dann würde v=Wurzel(2g*s) allerdings bedeuten, das je weiter das Objekt von der Oberfläche entfernt ist, es eine schnellere Geschwindigkeit besitzt (entspricht Multiplikation mit s), und je mehr es sich der Oberfläche nähert (s wird kleiner), proportional die Geschwindigkeit kleiner wird. Das Objekt würde also immer langsamer fallen, wenn er diese Fallgeschwindigkeit nun zu seiner normalen Geschwindkeit in jedem Frame hinzuaddiert!!! ---> Fehler????
Die Formel v=Wurzel(2g*s) beschreibt demnach die Geschwindigkeit, die das Objekt beim Aufschlag besitzt, wenn es aus der Höhe s fällt. Man kann diese Formel also nicht einfach jedes Frame neu ausrechnen und zu "speed" hinzuaddieren. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.07.2003, 09:19 Titel: |
|
|
@Mr. X:
Ja das wäre ganz korrekt(mach ich selber aber nicht so ;P). Ich wollte ja nur darauf hinweisen, dass es sicherlich an seiner Kollisionsbehandlung liegt und weniger an der Physik. :) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 20.07.2003, 11:11 Titel: |
|
|
Nimm doch einfach ne Parabel.
Dann nimmst du für die Zeit den X-Wert der Parabel und für den Y-Wert des Sprites den Y-Wert der Parabel _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 20.07.2003, 12:05 Titel: |
|
|
Zitat: | Die Formel v=Wurzel(2g*s) beschreibt demnach die Geschwindigkeit, die das Objekt beim Aufschlag besitzt, wenn es aus der Höhe s fällt. Man kann diese Formel also nicht einfach jedes Frame neu ausrechnen und zu "speed" hinzuaddieren. |
Man kann auch noch den Faktor t (Zeit) mit unterbringen und somit die Geschwindigkeit zu einer beliebigen Zeit (also für jeden Frame) neu berechnen. |
|
Nach oben |
|
|
|