Objekt auf Kreisbahn bewegen

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
The Dust
Beiträge: 16
Registriert: Mi Jul 30, 2008 7:58 pm

Re: Objekt auf Kreisbahn bewegen

Beitrag von The Dust » Do Jul 31, 2008 2:42 pm

@Dirty Oerti
Also derzeit benutze ich das Gamestudio 7.05 mit Lite-C. Das soll sehr viel mächtiger als C-Script (das ich sowieso nicht einsetze) sein und Pointer gibs bei Lite-C auch.

X = Radius * cos(Winkel)
Y= Radius * sin(Winkel)
Funktioniert gut, nur kommt es jetzt zu einem logischen Problem. Wenn ich jetzt nach rechts kreise und dann nach links kreisen will fährt er einen "Slalom" sozusagen. Er sollte aber den Kreisbogen den er nach rechts gezogen hat umgekehrt nach links wiederverfolgen. Er sollte immer auf einem Kreis bleiben. Könnte das schwierig werden ? Das Problem ist das das Objekt immer am gleichen Punkt startet sich im Kreisbogen zu bewegen. So ensteht eine schöne "8" wenn man immer abwechselnd die Richtung ändert.
Kerli hat geschrieben:D.h. du bildest einfach in jedem Schleifendurchlauf den Vektor vom gewünschten Kreismittelpunkt zum Objekt. Bildest dann den dazu normalen Vektor normalisierst diesen und multiplizierst ihn anschließend mit der (Winkel-)Geschwindigkeit des Objekts. Jetzt musst du nur noch "player_speed.x" und "player_speed.y" auf die Werte des errechneten Vektors setzen und schon bewegt sich dein Objekt auf einer schönen Kreisbahn

Das ist mir jetzt ein bisschen zu hoch :mrgreen: Ich weis auch nicht ob das im Gamestudio umsetzbar ist. Ich versuche mal vorerst die X = Radius * cos(Winkel); Y= Radius * sin(Winkel)-Methode zu verwenden.

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 » Do Jul 31, 2008 2:51 pm

The Dust hat geschrieben:X = Radius * cos(Winkel)
Y= Radius * sin(Winkel)
Funktioniert gut, nur kommt es jetzt zu einem logischen Problem. Wenn ich jetzt nach rechts kreise und dann nach links kreisen will fährt er einen "Slalom" sozusagen. Er sollte aber den Kreisbogen den er nach rechts gezogen hat umgekehrt nach links wiederverfolgen. Er sollte immer auf einem Kreis bleiben. Könnte das schwierig werden ? Das Problem ist das das Objekt immer am gleichen Punkt startet sich im Kreisbogen zu bewegen. So ensteht eine schöne "8" wenn man immer abwechselnd die Richtung ändert.
Ich vermute einen Programmierfehler, denn eine 8 kann ich mir hier nicht erklären.

Ansonsten kannsst du vielleicht cos und sin Werte buffern, die Anweisungen sind zu teuer, als dass sie immer wieder errechnet werden sollten.
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.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Objekt auf Kreisbahn bewegen

Beitrag von fat-lobyte » Do Jul 31, 2008 3:16 pm

Xin hat geschrieben:Ansonsten kannsst du vielleicht cos und sin Werte buffern, die Anweisungen sind zu teuer, als dass sie immer wieder errechnet werden sollten.
Nichts für ungut... Aber wenn er von "C- Script", 3D Gamestudio und so weiter spricht, "kosten" ihn die paar cos() und sin() ziemlich wenig.
Über solche dinge sollte er sich dann gedanken machen, wenn er in C oder C++ programmiert, und nicht in einer Skriptsprache.
Haters gonna hate, potatoes gonna potate.

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

Re: Objekt auf Kreisbahn bewegen

Beitrag von The Dust » Do Jul 31, 2008 3:39 pm

:idea: Ich habe keinen fixen Kreismittelpunkt. Deshalb bekomme ich eine "8". Der Kreismittelpunkt sollte die Kamera sein. Ich habe also die konkreten x und y-Koordinaten meines Mittelpunkt. Jetzt ist die Frage wo ich die einsetze damit der Mittelpunkt wirklich fix ist.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Objekt auf Kreisbahn bewegen

Beitrag von Kerli » Do Jul 31, 2008 5:04 pm

The Dust hat geschrieben::idea: Ich habe keinen fixen Kreismittelpunkt. Deshalb bekomme ich eine "8". Der Kreismittelpunkt sollte die Kamera sein.
Warum soll sich der Spieler eigentlich um die Kamera bewegen? Sollte das nicht eher umgekehrt sein?
The Dust hat geschrieben:Ich habe also die konkreten x und y-Koordinaten meines Mittelpunkt. Jetzt ist die Frage wo ich die einsetze damit der Mittelpunkt wirklich fix ist.
Das hängt davon ab, ob du die Bewegungsrichtung bzw. Geschwindigkeit des Objektes oder direkt die Position des Objektes ändern tust.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

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 Jul 31, 2008 6:46 pm

*grins* :)

Selbstzitat:
Nehmen wir an, die Kreismitte ist X=0 und Y=0.
Die Positionen bei einer gewissen Kreismitte berechnest du folgendermaßen:

X = Kreismitte_X + Radius * cos(Winkel)
Y = Kreismitte_Y + Radius * sin(Winkel)

Ich nehme mal an, dass du mit "+=" gearbeitet hast, was zwangsläufig zu falschen Ergebnissen führt. Bzw zu deiner 8.

Sollte das nicht gehen, dann bin ich iwo grad falsch am Überlegen :)

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.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Objekt auf Kreisbahn bewegen

Beitrag von Kerli » Do Jul 31, 2008 7:07 pm

Dirty Oerti hat geschrieben: Ich nehme mal an, dass du mit "+=" gearbeitet hast, was zwangsläufig zu falschen Ergebnissen führt. Bzw zu deiner 8.

Sollte das nicht gehen, dann bin ich iwo grad falsch am Überlegen :)
Ansonsten poste doch einfach einmal den entsprechenden Codeausschnitt. Der dürfte wohl eh nicht so umfangreich sein.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

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

Re: Objekt auf Kreisbahn bewegen

Beitrag von The Dust » Do Jul 31, 2008 9:50 pm

Code: Alles auswählen

while (1)
  {
     key_richtung = false;  //setze ich ein damit mir mein Objekt nicht von anfang an wegrollt
     if (key_cur)               //"cur" steht jetzt für "cursor right"
     {
        key_richtung = true;
        winkel = winkel + 1;
     }
     if (key_cul) 
     {
        key_richtung = true;
        winkel = winkel - 1;
     }
     if (key_richtung == true)
     {
        player_speed.x = 100* sin(winkel);  //100 ist jetzt einfach ein willkürlicher Wert
        player_speed.y = 100* cos(winkel);
     }
     else
     {
        player_speed.x = 0;
        player_speed.y = 0;
     } 
      phent_addtorqueglobal (zeiger, player_speed); // treibt mein Objekt "zeiger" (übrigends ein Kugel) an.                                    
    
     cam();                                            // Funktion die die Kamera anwirft
     wait (1); 
  }
So, dass steht dann alles in der Aktion des Objekts und sorgt für Bewegung.

X = Kreismitte_X + Radius * cos(Winkel)
Y = Kreismitte_Y + Radius * sin(Winkel)
funktioniert nicht so wirklich und "+=" zu ersetzen macht keinen Unterschied. Wieso sollte das eigentlich zu Fehlern führen ? Ich denke ich muss auf jeden Fall den Mittelpunkt, die Kamera, in die Berechnung einbeziehen. Das Objekt dreht sich übrigends um die Kamera weil das in der dritte Person als Perspektive ziemlich oft vorkommt. Die Kamera dreht dann auf ihrer Achse mit und bleibt auf der Stelle. Wenn man jetzt nach vorne oder zurück gehen will, geht der Player in die Richtung in die man gerade schaut.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Objekt auf Kreisbahn bewegen

Beitrag von Kerli » Do Jul 31, 2008 10:15 pm

Ok, jetzt weiß ich wo dein Problem liegt. Du setzt hier den Bewegungsvektor (player_speed) deines Spielers und nicht die Position. Im Gegensatz dazu gibt (X|Y) die Position des Spielers und nicht die Bewegung an.
Hast du auch irgendwie die Möglichkeit an die Position des Spielers zu kommen?
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

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

Re: Objekt auf Kreisbahn bewegen

Beitrag von The Dust » Do Jul 31, 2008 10:45 pm

Kein Problem an die Position des Spielers zu kommen. In dem Fall wäre es "zeiger.x" und "zeiger.y".

Antworten