Objekt auf Kreisbahn bewegen

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8474
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Objekt auf Kreisbahn bewegen

Beitrag von Xin » Di Aug 05, 2008 9:32 am

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

The Dust
Beiträge: 16
Registriert: Mi Jul 30, 2008 7:58 pm

Re: Objekt auf Kreisbahn bewegen

Beitrag von The Dust » Di Aug 05, 2008 11:50 am

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.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Objekt auf Kreisbahn bewegen

Beitrag von Dirty Oerti » Di Aug 05, 2008 1:24 pm

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.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

The Dust
Beiträge: 16
Registriert: Mi Jul 30, 2008 7:58 pm

Re: Objekt auf Kreisbahn bewegen

Beitrag von The Dust » Di Aug 05, 2008 4:19 pm

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: ).

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Objekt auf Kreisbahn bewegen

Beitrag von Dirty Oerti » Di Aug 05, 2008 5:58 pm

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?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

The Dust
Beiträge: 16
Registriert: Mi Jul 30, 2008 7:58 pm

Re: Objekt auf Kreisbahn bewegen

Beitrag von The Dust » Mi Aug 06, 2008 11:43 am

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.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Objekt auf Kreisbahn bewegen

Beitrag von Dirty Oerti » Mi Aug 06, 2008 11:57 am

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
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

The Dust
Beiträge: 16
Registriert: Mi Jul 30, 2008 7:58 pm

Re: Objekt auf Kreisbahn bewegen

Beitrag von The Dust » Do Aug 14, 2008 3:20 pm

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.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Objekt auf Kreisbahn bewegen

Beitrag von Dirty Oerti » Do Aug 14, 2008 3:34 pm

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
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

The Dust
Beiträge: 16
Registriert: Mi Jul 30, 2008 7:58 pm

Re: Objekt auf Kreisbahn bewegen

Beitrag von The Dust » Do Aug 14, 2008 7:59 pm

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 ;)

Antworten