Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.07.2003, 13:50 Titel: |
|
|
oh sorry, stimmt das ist mit welcher Geschwidigkeit man kollidiert...
dann nehm doch das
v= a*t;
a=9,81m/s²
das sehe dann so aus:
vg=a/FRAME_RATE;
vg ~= Velocity Gravity
v= v + vg;
und du hast deine Berechnung dann machst du das noch so:
Wenn Körper über dem Boden
{
vg=a/FRAME_RATE;
v += vg;
}
Wenn Körper kollidiert mit Boden
{
a *=-1;
v *=-1;
}
damit müsste das funktionieren. Das hier gilt aber nur für elastische Körper!!! _________________ 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, 15:04 Titel: |
|
|
KI hat Folgendes geschrieben: | 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. |
TheMillenium hat Folgendes geschrieben: | ...v= a*t;
...
vg=a/FRAME_RATE;
... |
@Alle
Warum so kompliziert, die CPU sollte ihre Zeit für was besseres nutzen!
Da die Fallgeschwindigkeit eine Konstante!!!! ist, für die Entfernungen wie Ihr sie alle darstellt (Oder simuliert Ihr auf Euren 768 im Schnitt in der Höhe dargestellten Pixeln etwa mehrere hundert Kilometer, dann wäre sie natürlich nicht konstant? Ich glaube nicht!) reicht es doch, wenn Ihr diese Konstante in jedem Durchlauf nur zur Geschwindigkeit hinzuaddiert!!! Also nixs mit Multiplikation und Division in jedem Frame neu errechnen!!! Eine einfache Addition bewirkt dasselbe Ergebnis und ist zudem in weniger Takten abgearbeitet als Multiplikation und Division.
@TheMillenium
Man sollte versuchen, seine spielrelevanten Daten unabhängig von der Anzahl der dargestellten Frames zu berechnen. |
|
Nach oben |
|
 |
under_construction Junior JLI'ler
Alter: 36 Anmeldedatum: 12.11.2002 Beiträge: 52
Medaillen: Keine
|
Verfasst am: 20.07.2003, 15:15 Titel: THX |
|
|
Hi @ all!
erst mal vielen Dank für die menge an antworten!!!
Das ist erst ma der Codeauschnitt für die Bewegung des Sprites.
Erklärung: r2 ist das Rect für das Sprite, das für die Kollision verwendet
wird
g_x und g_y sind die Koordinaten der linken oberen Ecke des
Sprites.
Gravitation beträgt jetzt 0.3f.
Sp ist der Speed und beträgt 5 bzw -5
NO_COLL bedeute, dass keine Kollision auftritt
Y_CH heisst: das Sprite dotzt an der oberen/unteren Seite auf
Der Code ist nach Mr.X geändert funzt aber trotzdem noch net.
Code: |
...
r2.left=g_x;
r2.top=g_y;
r2.right=g_x+29;
r2.bottom=g_y+29;
if(Start==true)
{
Sp=Sp+Gravitation;
g_y+=Sp;
g_x+=0.1f;
r2.left=g_x;
r2.top=g_y;
r2.right=g_x+29;
r2.bottom=g_y+29;
int a=Kollision(r1,r2);
if(a!=NO_COLL)
{
if(a==Y_CH)
{
Sp=-(Sp);
g_y+=Sp;
}
}
}... |
@TheMillenium
So genau wollt ich des gar net machen
@Hazel und Mr.X
Ich hab versucht bei Kollision das Objekt wieder zurückzusetzen
aber es bleibt trotzdem am Boden.
@The Lord of Programming
Ok, das wär auch möglich, aber ich will das nich mit Hilfe von
gleichbleiben Formeln abhängig machen sondern das Sprite einfach mal runterfallen lassen.
Ciao and thx @ all! |
|
Nach oben |
|
 |
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 20.07.2003, 15:26 Titel: Re: THX |
|
|
under_construction hat Folgendes geschrieben: | ...
r2.left=g_x;
r2.top=g_y;
r2.right=g_x+29;
r2.bottom=g_y+29;
if(Start==true)
{
Sp=Sp+Gravitation;
g_y+=Sp;
g_x+=0.1f;
r2.left=g_x;
r2.top=g_y;
r2.right=g_x+29;
r2.bottom=g_y+29;
int a=Kollision(r1,r2);
if(a!=NO_COLL)
{
if(a==Y_CH)
{
Sp=-(Sp);
g_y+=Sp;
}
}
}... |
Nimm mal das rot Markierte raus! Ich kenn Deine Kollisionberechnung nicht genau, aber wenn Y_CH lediglich bedeutet, daß das Sprite aufsetzt, dann tritt dieser Fall ja nur ein, eben wenn es aufsetzt. Was ist aber, wenn das Sprite schon wesentlich weiter im Objekt ist, dann setzt es ja schon längst nicht mehr auf, aber eine Kollision ist es trotzdem. |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.07.2003, 16:26 Titel: |
|
|
Zitat: | @TheMillenium
Man sollte versuchen, seine spielrelevanten Daten unabhängig von der Anzahl der dargestellten Frames zu berechnen. |
muss man aber!!!
Ansonsten zeig mir mal nen besseren Weg wie das geht!!!
Geht eben nicht weil der Abstand immer gleich sein muss, außer du schreibst deine Funktionen nur für eine bestimmte FRAME_RATE z.B. 60, aber wenn du sie irgendwann woanders übernehmen willst, wirst du Probleme bekommen... _________________ 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, 16:31 Titel: |
|
|
Man trennt die Berechnung von Spieldaten und die Berechnung von Daten zur grafischen Darstellung!
Wenn Du bei jeder Spieldaten-Berechnung Deine Frames mit einbeziehen musst, dann verschwändest Du Performance durch ständiges Dividieren durch die FRAME_RATE. |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.07.2003, 17:06 Titel: |
|
|
FRAME_RATE hat überhaupt nichts direkt nur mit dem Grafischen zu tun, also wirklich du solltest dir wirklich mal mehr Gedanken darüber machen und vielleicht nochmal das Buch durchlesen!
Die Frame_rate bestimmt wieoft deine Spielschleife in 1 Sekunde durchlaufen wird. Ist auf jeden Fall bei mir so. Und deshalb ist automatisch alles vom Spiel verbunden, die Grafikausgabe & die Berechnung von allen Objekten in der Spieleschleife.
Und ich glaube nicht, dass du weißt, was rechenintensiv ist und was nicht.
Außer du hast die Bücher von Stefan Zerbst & Co gelesen...
weil die Beschleunigung eines Objektes immer gleich bleibt teil ich den Wert einmal durch die Frame_rate und dann ist es ja nur noch eine Addition bzw. eine Subtraktion. Und die ist nicht wirklich Performanceintensiv, okay? _________________ 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, 18:04 Titel: |
|
|
TheMillenium hat Folgendes geschrieben: | ...Und ich glaube nicht, dass du weißt, was rechenintensiv ist und was nicht.
Außer du hast die Bücher von Stefan Zerbst & Co gelesen... |
Hab ich zwar gelesen, aber darauf begründe ich nicht mein Wissen
TheMillenium hat Folgendes geschrieben: | Die Frame_rate bestimmt wieoft deine Spielschleife in 1 Sekunde durchlaufen wird... |
Bei dieser Erklärung geb ich nach ^^
TheMillenium hat Folgendes geschrieben: | ...okay? |
okay! |
|
Nach oben |
|
 |
KI JLI Master

Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 20.07.2003, 19:17 Titel: |
|
|
Wenn man einen Körper annähernd realistisch zu Boden fallen lassen möchte sollte man auf die altbewährten Formeln zurückreifen, die wir alle im Physikunterricht gelernt haben.
Dazu gehört natürlich auch der Faktor a (Beschleunigung).
Die wichtigste Formel ist das
Weg-Zeit-Gesetz: s = 0.5 * g * t² (s = Strecke ; g = Erdbeschleunigung ; t = Zeit)
Am besten ich erläutere alles einfach mal an einem Beispiel:
Nehmen wir an, dass wir einen Stein (Gewicht ist irrelevant) vom Kölner Dom (150 m) nach unten fallen lassen.
Das nennt sich jetzt freier Fall und wir vernachlässigen den Luftwiederstand.
Man muss dazu wissen, dass der Stein nur fällt, weil er von der Erde angezogen wird.
Und zwar mit ungefähr 10 Newton. Diese Gewichtskraft ist überall auf der Erde etwas unterschiedlich. (Pol: 9,84 N ; Köln: 9,81 N ; Äquator: 9,78 N)
[Man kann lustige Effekte erzielen, wenn man in seinen Programmen diese Konstante ändert. Nimmt man den Wert 1,62 N, so lässt sich die Gravitation des Mondes simulieren.]
Der Stein erfährt eine Beschleunigung und dadurch verändert sich die Geschwindigkeit!
Der Stein wird die ganze Zeit beschleunigt und wird somit immer schneller!
So hat er nach 2 Sekunden etwa eine Geschwindigkeit von 72 km/h und bei seinem Aufprall (nach 5,477 Sekunden) schon 197 km/h.
Aber die Geschwindigkeit müssen wir in diesem Fall gar nicht errechnen!
Wir wollen nun einfach mal wissen welche Strecke der Stein nach 2 Sekunden hinterlegt hat.
S(von 2 Sekunden) = 0.5 * 10 * 2² [Weg-Zeit-Gesetz]
10 -> Erdbeschleunigung
2² -> 2 Sekunden hoch 2 (t²)
Als Ergebnis erhalten wir 20
Die Einheit beträgt Meter!
Um nun herauszufinden wie viel Zeit verbleibt bis der Stein am Boden angelangt ist (150 m), müssen wir die Formel nur umformen.
150(von unbekannt Sekunden) = 0.5 * 10 * t²
nach t aufgelöst ->
t = √(2s / g)
sprich: t = Wurzel aus (2s durch g) bzw. Wurzel aus ((2 * 150) / 10)
Ergebnis: 5.477 Sekunden
Man braucht nur das Weg-Zeit-Gesetz zu benutzen und kann für jeden Zeitpunkt die hinterlegte Strecke herausfinden!
Was will man mehr? 
Zuletzt bearbeitet von KI am 20.07.2003, 22:27, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.07.2003, 19:29 Titel: |
|
|
Nun ja dein Teil hat nur einen Haken....wir wollen wissen umwieviele Einheiten sich der Körper bis zum nächsten Frame also zur nächsten Zeiteinheit bewegt.
Ok wenn wir die Höhe wissen und dann die Zeit
dann hier in deinem Beispiel: 150m/5.477s = 27.39 m/s
also müssen wir in einer Sekunde um ca. 27.39 Maßeinheiten nach unten gehen..okay das klappt bestimmt auch aber warum nicht wie ich beschrieben einfach das Geschwindigkeit-Zeit-Gesetz verwenden? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
KI JLI Master

Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 20.07.2003, 19:56 Titel: |
|
|
@TheMillenium
Aber du sprichst doch von der Geschwindigkeit! 27.39 Meter pro Sekunde!
Mithilfe des Weg-Zeit-Gesetzes kann man die hinterlegte Strecke ausrechnen!
Ohne irgendwelche Frameraten in die Berechnung mit einzubeziehen!!
Man lässt einfach einen Timer laufen, der die Zeit angibt von dem Zeitpunkt an dem das Objekt "fallen gelassen" worden ist. t0
Bei jedem Schleifendurchlauf wird überprüft wieviel Zeit vergangen ist.
Anschließend rechnet man die Strecke aus.
<edit>
Und alles ohne Framerate!
Jetzt kann die Framerate (Bildwiederhohlungsfrequenz) beliebig sein (z.B 300 fps) und das Objekt bewegt sich nicht schneller oder langsamer.
Es ist unabhängig! So wie es sein sollte. 
Zuletzt bearbeitet von KI am 20.07.2003, 20:25, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 20.07.2003, 20:15 Titel: |
|
|
tschuldigung, und wie bewegst du dein Objekt? Um wieviele EINHEITEN? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
KI JLI Master

Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 20.07.2003, 20:31 Titel: |
|
|
TheMillenium hat Folgendes geschrieben: | tschuldigung, und wie bewegst du dein Objekt? Um wieviele EINHEITEN? |
Das Ergebnis ist ja in Metern.
Man muss also festlegen wieviele Meter einer Einheit in der Matrix entsprechen. |
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 20.07.2003, 21:26 Titel: Re: THX |
|
|
under_construction hat Folgendes geschrieben: | @The Lord of Programming
Ok, das wär auch möglich, aber ich will das nich mit Hilfe von
gleichbleiben Formeln abhängig machen sondern das Sprite einfach mal runterfallen lassen. |
Da kann man doch auch alle möglichen Variablen mit rein packen. Die Formel ist doch nicht immer gleich.
Hattest du das schon in der Schule?
Da kannst du eigentlich alles einstellen. Mit a die Dehnung/Pressung und die Richtung der Parabel.
Aus der Formel rechnet man sich dann die Scheitelform, ich glaub das war so:
d=X-Koordinate des Scheitels
e=Y-Koordinate des Scheitels _________________ 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: 20.07.2003, 21:50 Titel: |
|
|
da muss ich dich glaub ich leider enttäuschen das ist zwar die schlussformel, aber mach's lieber so, das klappt immer:
x1,2 = (-b+-Wurzel_aus(b²-4ac))/2
Parabel kann bis zu 2 x Werte haben...
naja y kriegt man ganz leicht
y=ax²+bx+c _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
|