Seite 4 von 5

Re: Objekt auf Kreisbahn bewegen

Verfasst: Di Aug 05, 2008 9:32 am
von Xin
The Dust hat geschrieben:
Dirty Oerti hat geschrieben:Gibt es eigentlich noch "move" ?
Das ist im Grunde das Problem. Ich kann nur dieses "phent_addtorqueglobal " benutzen. Die praktischen "move"-Funktionen funktionieren nicht mit Physik. "phent_addtorqueglobal" gibt dem Objekt Drehmoment, mein Ball rollt. Da würde ein direkte Koordinatenänderung eben ein bisschen komisch ausschauen.
Mit Hilfe von x = radius * cos(winkel) usw. haben wir den Ball ja schon zum Kreisen gebracht, jetzt muss er nur mehr gezwungen werden um die Kamera kreisen.
Wenn er um die Kamera kreisen muss, dann muss doch nur der Mittelpunkt des Kreises entsprechend von der Kamera gesetzt werden!?
Oder übersehe ich da irgendein Problem?

Re: Objekt auf Kreisbahn bewegen

Verfasst: Di Aug 05, 2008 11:50 am
von The Dust
Xin hat geschrieben:Wenn er um die Kamera kreisen muss, dann muss doch nur der Mittelpunkt des Kreises entsprechend von der Kamera gesetzt werden!?
Exakt.

x = camera.x + radius * cos(winkel);
y = camera.y + radius * sin(winkel);
Funktioniert aber nicht. Der Ball bewegt sich meistens grade aus, aber manchmal wechselt er die Richtung :shock: Das kann ja nur funktionieren wenn der Ursprung des Koordinatensystems immer am Ball liegt. Passiert das schon automatisch ? Ich glaube der Ursprung wird vom Gamestudio am Mittelpunkt des Levels gesetzt. Dann kann es ja dann nicht funktionieren.

Re: Objekt auf Kreisbahn bewegen

Verfasst: Di Aug 05, 2008 1:24 pm
von Dirty Oerti
The Dust hat geschrieben:
Dirty Oerti hat geschrieben:Also den Kreis zu errechnen ist kein Problem. Das geht mit Sinus und Cosinus.

Jetzt mal die Frage:

Was stehen dir für Funktionen zur Verfügung, um deinen Spieler zu bewegen und was für Parameter möchten diese Funktionen haben?

Gibt es eigentlich noch "move" ?
Das ist im Grunde das Problem. Ich kann nur dieses "phent_addtorqueglobal " benutzen. Die praktischen "move"-Funktionen funktionieren nicht mit Physik. "phent_addtorqueglobal" gibt dem Objekt Drehmoment, mein Ball rollt. Da würde ein direkte Koordinatenänderung eben ein bisschen komisch ausschauen.
Mit Hilfe von x = radius * cos(winkel) usw. haben wir den Ball ja schon zum Kreisen gebracht, jetzt muss er nur mehr gezwungen werden um die Kamera kreisen.
BRAUCHST du denn dringend die Physik? Reicht nicht auch move? Das ist doch mit Kollisionserkennung.
Kannst du vllcht mal ne Dokumentation der Funktion "phent_addtorqueglobal" geben?

The Dust hat geschrieben:
Xin hat geschrieben:Wenn er um die Kamera kreisen muss, dann muss doch nur der Mittelpunkt des Kreises entsprechend von der Kamera gesetzt werden!?
Exakt.

x = camera.x + radius * cos(winkel);
y = camera.y + radius * sin(winkel);
Funktioniert aber nicht. Der Ball bewegt sich meistens grade aus, aber manchmal wechselt er die Richtung :shock: Das kann ja nur funktionieren wenn der Ursprung des Koordinatensystems immer am Ball liegt. Passiert das schon automatisch ? Ich glaube der Ursprung wird vom Gamestudio am Mittelpunkt des Levels gesetzt. Dann kann es ja dann nicht funktionieren.
Das glaube ich dir nicht. Die beiden Zuweisungen oben SIND richtig.
Nur ist das halt bloßes Koordinaten setzen. Heißt keine Kollisionserkennung und keine Physik.

Und ja, der Ursprung liegt in der Levelmitte. Die kannst du in "WED" leicht sehen.

Re: Objekt auf Kreisbahn bewegen

Verfasst: Di Aug 05, 2008 4:19 pm
von The Dust
Interessant....wenn ich diesen Code benutze:

Code: Alles auswählen

player_speed.x = (camera.x - zeiger.x) + 100* cos(winkel);
player_speed.y = (camera.y - zeiger.y) + 100* sin(winkel);
passiert das gleiche wie bei dem:

Code: Alles auswählen

player_pos2.x = camera.x + 100* cos(winkel); 
player_pos2.y = camera.y + 100* sin(winkel);
player_speed.x = player_pos2.x - zeiger.x;
player_speed.y = player_pos2.y - zeiger.y;
Mit links macht der Ball einen schönen Kreis, aber nicht um die Kamera und bei rechts macht er Ellipsen.

@Dirty Oerti
Also ohne Physik kann ich meine Kugel kaum zum rollen und herumspringen bringen denk ich ;)

Im Manual steht :

phent_addtorqueglobal ( entity, vecTorque );
Torque (=“angular force”) will be applied to the specified entity. No linear movement is imparted upon the object, it will just change its rotation. The torque vector can be visualized as the axis of desired rotation and the magnitude of this vector determines the desired acceleration, e.g. vecTorque (0,0,10000) will make an object spin around the globl z-axis.


[quote="Dirty Oerti"]Nur ist das halt bloßes Koordinaten setzen. Heißt keine Kollisionserkennung und keine Physik.[quote]

Das verstehe ich jetzt nicht. Die Koordinaten wandern ja ins phent_addtorqueglobal und dann hat man Physik, Kollisionserkennung und weis der Kukkuk noch alles ( :mrgreen: ).

Re: Objekt auf Kreisbahn bewegen

Verfasst: Di Aug 05, 2008 5:58 pm
von Dirty Oerti
e.g. vecTorque (0,0,10000) will make an object spin around the globl z-axis.
So wie ich das verstanden habe ist diese Funktion nicht für eine Bewegung, sondern für eine Drehung verantwortlich.
Also eine Drehung um die eigene Achse.

Du brauchst aber eine Funktion, die deine Entity bewegt.
Also ohne Physik kann ich meine Kugel kaum zum rollen und herumspringen bringen denk ich ;)
:D Der war gut.
Rollen: SEHR einfach zu implementieren
Herumspringen: Auch recht einfach.

Dazu braucht man nur ein paar grundlegende, physikalische Kenntnisse.


Hm...kannst du mir mal alle Funktionen geben, bzw einen Link auf eine Doku aller Funktionen, die etwas mit Bewegung und/oder Physik zu tun haben?

Re: Objekt auf Kreisbahn bewegen

Verfasst: Mi Aug 06, 2008 11:43 am
von The Dust
Das Objekt ist ja eine Kugel. Durch Drehung um ihre Achse bewegt sie sich. Es gibt noch viele andere auf die Physik basierende Bewegungs-Funktionen, zb. durch add_forceglobal(...) wirkt eine Kraft auf das Objekt. Diese Funktionien brauchen aber alle die gleichen Parameter, einen Zeiger der auf das Objekt zeigt und einen Vector. Eine Doku über Bewegung/Physik habe ich bis jetzt noch nicht gefunden. Könnte ich vielleicht im GS-Forum suchen.
Also ich glaube nicht, dass man Sachen wie Gravitation, Gewicht, Reibung auf soliden Gegenständen, Luftreibung, Drehmoment, Abpralleffekt, usw. im Handumdrehen selber machen könnte.
:idea: Wie wäre es wenn wir ein Objekt ohne Physik um die Kamera kreisen lassen (was der Ball ja eigentlich tun müsste) und die Koordinaten dieses Objekts benutzen wir für den player_speed.x/y. Das werde ich gleich mal versuchen.

Re: Objekt auf Kreisbahn bewegen

Verfasst: Mi Aug 06, 2008 11:57 am
von Dirty Oerti
Gravitation einzubringen ist so ziemlich die leichteste Aufgabe.
Einfach in jedem Bewegungsvektor einen Anteil nach unten hinzufügen.

Wozu brauchst du bitte Gewicht?
Du solltest dir überlegen, was du WIRKLICH brauchst, und ob manche Sachen nicht evtl überflüßig sind.

Reibung auf soliden Gegenständen ist auch kein Problem, da gibt es sogar beim "move" eine Einstellung dafür.
Luftreibung..naja...Luftreibung erhöht sich mit der Geschwindigkeit. Heißt du nimmst dir eine Variable mit deiner Geschwindigkeit, schaust im Internet die Formel zur Berechnung der Luftreibung nach, holst dir auch gleich die Reibungszahl von Luft (dein Ball bewegt sich durch Luft, oder?) und bringst das in deine Bewegung ein: fertig.

Wozu um Himmelswillen brauchst du Drehmoment?

Abpralleffekt ist auch machbar.
Bei Kollision mit einer Wand wird doch ein Event generiert. Dieses Event fängst du ab. Dann ermittelst du, wo du gegen gerast bist. Nimmst dir den Normalvektor dieser Fläche. Nimmst deinen eigenen Vektor. Aus den beiden kannst du Aufprallwinkel feststellen.
Dann: Aufprallwinkel ist gleich dem Abprallwinkel.
Gleichsetzen. Neuen eigenen Bewegungsvektor berechnen. Einsetzen. Fertig.

Wegen mit Physik:
Die Funktionen erwarten eine Kraft, die auf das Objekt dann angewandt wird.
Das heißt im Klartext:

Es funktioniert so nicht.

Denn, nehmen wir mal an, du drückst einmal rechts. Es wird eine Kraft auf das Objekt übertragen, das Objekt beschleunigt in eine GERADE Richtung. Diese Richtung bleibt auch gerade, solange du keine neue Kraft auf das Objekt einwirken lässt. Heißt: Ohne weitere Krafteinwirkung schmiert das Objekt davon.

Wie das lösbar wäre:

Du könntest nun natürlich immer bei einem Tastendruck eine Seitliche Kraft auf den Ball wirken lassen. Die Kraft müsste eine Tangente an den Kreis sein, auf dem sich der Ball bewegen soll.
Nur mit dieser einen Kraft passiert das oben beschriebene.
Jetzt führst du aber eine Überprüfung ein:

Ist der Ball vom Kreismittelpunkt weiter entfernt als Radius+Toleranzzone, dann lass eine Kraft auf den Ball einwirken.
Diese Kraft muss in Richtung Kreismittelpunkt zeigen!

Ist der Ball zu nahm am Kreismittelpunkt (Entfernung kleiner als Radius-Toleranzzone), lass eine Kraft auf den Ball einwirken, die weg vom Mittelpunkt wirkt.

Einfach ist das natürlich auch nicht gerade...
Und ich garantiere mal nicht, das es funktioniert.

Aber ich helfe gerne^^ :)

MfG
Daniel

Re: Objekt auf Kreisbahn bewegen

Verfasst: Do Aug 14, 2008 3:20 pm
von The Dust
So, nach langem hin und her habe ich mir für eine simplerer Steuerung entschieden. Dabei dreht sich die Kamera auf Tastendruck um den Player und man kann dann in die Richtung rollen in die man gerade schaut. Die Kamera ist schon erledigt. Eine Idee wie man den Rest machen könnte ? Wenn man sich das bildlich vorstellt bildet die Kamera und der Player ein Achse (wobei der Player der Mittelpunkt dieser Achse ist und die Kamera ist ein Ende). Der Player müsste sich entlang dieser Achse bewegen.

Re: Objekt auf Kreisbahn bewegen

Verfasst: Do Aug 14, 2008 3:34 pm
von Dirty Oerti
Tag! :)

Hier kommen wieder deine Freunde Sinus und Cosinus.

Du wirst ja sicherlich die Kamera auch durch oben genannte um den Ball bewegen.
Folglich hast du auch einen Winkel.

Gut. Diesen Winkel drehst du um (+180 und gucken, dass es nicht über 360 ist).
Somit hast du die Richtung, in die sich der Ball (bei Vorwärts) bewegen muss.

Nun überlegst du dir den Wert, um den sich der Player bewegen soll, wenn du auf eine Taste drückst.
Sagen wir mal 5.

Dann berechnest du das folgendermaßen:

X += (sin Winkel) * 5
Y += (cos Winkel) * 5

Kann auch sein, dass du sin und cos vertauschen musst. Ich bin mir jetzt nicht sicher.

MfG
Daniel

Re: Objekt auf Kreisbahn bewegen

Verfasst: Do Aug 14, 2008 7:59 pm
von The Dust
Aeiii es klappt :mrgreen: Musste den Winkel übigends 270° drehen.
Dann bedanke ich mich mal ganz herzlich für eure Hilfe. Als kleines Dankeschön kann ich ja das Game hier posten wenns fertig ist ;)