JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=1065db4d8b6d42765934d9b31b63bfbaMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Problem mit Gravitation
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 19.07.2003, 15:56    Titel: Problem mit Gravitation Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 19.07.2003, 16:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nEp
Junior JLI'ler



Anmeldedatum: 03.06.2003
Beiträge: 75

Medaillen: Keine

BeitragVerfasst am: 19.07.2003, 17:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
under_construction
Junior JLI'ler


Alter: 36
Anmeldedatum: 12.11.2002
Beiträge: 52

Medaillen: Keine

BeitragVerfasst am: 19.07.2003, 18:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 19.07.2003, 19:09    Titel: Antworten mit Zitat

Warum muss denn Speed < 0 sein, damit die Gravitation addiert wird?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 19.07.2003, 20:53    Titel: Antworten mit Zitat

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 Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 19.07.2003, 21:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Mr.X
Junior JLI'ler



Anmeldedatum: 15.04.2003
Beiträge: 88

Medaillen: Keine

BeitragVerfasst am: 19.07.2003, 21:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 00:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 08:00    Titel: Antworten mit Zitat

Berechne doch alles am besten ganz physikalisch! Very Happy
....._______
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
Benutzer-Profile anzeigen Private Nachricht senden
Mr.X
Junior JLI'ler



Anmeldedatum: 15.04.2003
Beiträge: 88

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 08:58    Titel: Antworten mit Zitat

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 ^^Wink
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
Benutzer-Profile anzeigen Private Nachricht senden
Mr.X
Junior JLI'ler



Anmeldedatum: 15.04.2003
Beiträge: 88

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 09:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 09:19    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 11:11    Titel: Antworten mit Zitat

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 Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 20.07.2003, 12:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum