Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.03.2015, 08:55

Frage: Die Position P(X|Y) eines sich bewegenden Objekts im 2D Raum bestimmen ?

Guten Tag!

Ich experimentiere gerade mit C++ und SDL2 herum.
Mein Ziel ist es ein Raumschiff im 2D Raum zu bewegen.
Mit den Pfeiltasten <-- und --> wird der Winkel verändert.
Mit den Pfeiltaste hoch bzw. runter wird die Geschwindigkeit verändert.
X und Y Position des Raumschiffs sind Integer Werte (Nichtkomma Zahlen).



Mein bisheriger Ansatz ist vereinfacht geschrieben folgender:

float fWinkel = 22.0f;
int Raumschiff.x = 500;
int Raumschiff.y = 500;

while()
{
Raumschiff.x += cos(fWinkel) * 10.0f;
Raumschiff.y += sin(fWinkel) * 10.0f;
}

Was nicht funktioniert !

Ich überlege halt womit ich x und y addieren bzw. subtrahieren muss damit sich
das 2D-Objekt im entsprechendem Winkel bewegt.

Raumschiff.x und Raumschiff.y ergeben ja den Punkt P(500|500).
Und den Winkel a von 22.0° habe ich ja auch.
Und wenn man bedenkt das dass Objekt nur bis kurz hinter den Bildschirmrand fliegt
dann habe ich auch eine Seite eines Dreiecks in dem ein Winkel immer 90° ist.

Die Steigung m ist dann doch tan(22) und der andere Wert einer Steigung ist ja immer 1.

Also dachte ich ich z.B. x += 1 und y += tan(22) um das Objekt zu bewegen.

Aber irgendwie funktioniert das alles nicht und daher wollte ich mal hier Fragen ob jemand eine bessere Idee hat die ich nachvollziehen kann.

Mit freundlichen Grüßen
_Andi
:)

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

18.03.2015, 09:02

Schonmal ein Tipp im Voraus: Die Winkelfunktionen arbeiten im Bogenmaß.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

3

18.03.2015, 09:17

Außerdem solltest du deine Positionen auf float umstellen, sonst kommst du bei genüged fps nicht mehr voran, da man Bewegungen immer mit der Zeit multiplizieren muss, um auf allen PCs gleich schnell voran zu kommen.

4

18.03.2015, 16:10

Ich habe im Internet nach Bogenmaß gesucht und dachte ich wäre auf einen guten Hinweis in einem Java Forum gestoßen.
Dort ging es darum das man Punkte auf einem Kreis bestimmt.
Ich habe also eine Variable int n360Grad = 2*PI/360 genommen und versucht den Punkt C eines Dreiecks zu bestimmen.
Punkt C x = cos(Winkel * n360Grad) * Radius und Punkt C y = sin(Winkel * n360Grad) * Radius ...
Aber irgendwie klappt das alles nicht. Ich war in Mathe noch nie so gut :( :dash:
:)

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

5

18.03.2015, 16:16

Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

SlinDev

Treue Seele

Beiträge: 142

Wohnort: Lübeck

Beruf: Programmierer

  • Private Nachricht senden

6

18.03.2015, 16:20

while()
{
float fWinkelRad = fWinkel*2.0f*pi/360.0f;
Raumschiff.x += cos(fWinkelRad) * 10.0f;
Raumschiff.y += sin(fWinkelRad) * 10.0f;
}

Wichtig ist dabei dass der Winkel in Radian kein Integer Wert ist, da diese ja nur Ganzzahlen zulassen, Radian für einen kompletten Kreis aber auf 0 bis 2*Pi beschränkt sind, also 0 bis ca 6.3. 2*Pi/360 ist als Integer 0.
Und wie schon gesagt, willst du vermutlich auch die Position des Schiffes als float haben und erst beim setzen der Position der Grafik auf Ganzzahlen beschränken. (Ansonsten bekommst du eventuell komisches Subpixel flickern)

7

18.03.2015, 21:06

Vielen Dank! Werde das demnächst mal ausprobieren und drüber nach denken . Schönen Abend Noch. _Andi
:)

8

20.03.2015, 09:18

Die Zip Datei enthält einige Klassen um mit SDL2 ein Spiel zu programmieren. Dachte mir das es für irgendwen nützlich sein könnte. Die Abhängigkeiten müssen natürlich erst noch erfüllt werden (sprich SDL2 muss unter C:\...usw. liegen und die DLLs müssen in den Ordner wo das Spiel kompiliert wird.). Die Abhängigkeiten kann man auch der Layout Datei vom Dev C++ Projekt entnehmen. Gruß _Andi.
:)

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »_Andi« (26.08.2018, 20:56) aus folgendem Grund: Kurze Erklärung warum ich das Archiv hochgeladen habe.


Werbeanzeige