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

27.07.2008, 12:48

[SDL] 2D, Drehung, Kollision

Hallo,

ich beschäftige mich schon etwas länger mit Spieleprogrammierung, aber bin brav im 2D-Bereich geblieben :D

Jedenfalls habe ich kein Problem damit z.B. Pacman zu programmieren.

Ich möchte aber jetzt etwas neues Versuchen. Man soll eine Figur steuern können die sich um 360° drehen kann. Außerdem sollen die Kollisionsabfragen dann noch korrekt funktionieren.

Ein weiteres Problem wäre: Wie berechne ich die X/Y-Werte unter Beachtung der Rotation?

Könntet ihr mir ein paar Vorschläge machen, wie man das am Besten umsetzen kann. Ohne Rotation wäre ich in der Lage es zu programmieren. Aber man soll sich ja weiter entwickeln :o

Vielen Dank,
Dummie

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

27.07.2008, 14:35

Beschäftige dich mal mit Vektorgeometrie und cosinus/sinus, dann ist das relativ leicht eine rotation in Vektoren umzuwandeln.

Die Kollision ist nicht mehr so trivial. Wenns nicht so extrem ist, würde ich, wenn ich dich wäre einfach mal Kreiskollisionen machen. Ansonsten gibt es hier eine gute Möglichkeit:
http://flashmove.com/forum/showthread.php?t=15513

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

27.07.2008, 14:35

Zitat von »"Dummie"«

Außerdem sollen die Kollisionsabfragen dann noch korrekt funktionieren.


dahin gehend würde ich dir bounding-circles empfehlen, in dem meisten fälle ausreichend genau und einfach und schnell zu testen. wenn das absolut nicht passt wären noch oreintierte boxen möglich, ich empfehle dir ersteres.

Zitat von »"Dummie"«

Ein weiteres Problem wäre: Wie berechne ich die X/Y-Werte unter Beachtung der Rotation?


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
// als beispiel nehm ich 22,5°, drehung vom schiff

float fWinkel = 3.1415f * 0.125f;

//Position vo deinem objekt

float fPosX = 100.0f;
float fPosY = 100.0f;

//bewegunsggeschwindigkeit

float fSpeed = 2.0f;

//jetzt bewegst du dich einfach so:

fPosX += cosf(fWinkel) * fSpeed;
fPosY += sinf(fWinkel) * fSpeed;


denke daran, dass 0° bei westen ligt (wenn mans am einfachsten sagen will) und da vorne sein muss, sonst musste immer beim winkel was abziehen/addiern.

4

27.07.2008, 16:18

Hilft mir sehr weiter. Danke für eure Antworten :) :) :)

5

27.07.2008, 16:37

Hey, so ne Frage hatte ich auch mal, und ich habs nicht ganz verstanden, aber anhand des Beispiels müsste ich das hinbekommen. Nur hab ich noch eine Frage:

Zitat

C-/C++-Quelltext

1
2
// als beispiel nehm ich 22,5°, drehung vom schiff 

float fWinkel = 3.1415f * 0.125f; 


Die 3.1415 ist Pi, aber wie kommt man auf 0.125?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

6

27.07.2008, 17:20

3.1415 -> 180°
0.125 = 1/8
-> 180 / 8 = 22,5°

7

27.07.2008, 17:40

Das heißt, hätte ich ne Rotation von 50°, dann bräuchte ich wieder die 180°, also die 3.1415 und:

50*x = 180
x = 180/50 = 3.6

y = 1/3.6 = ca. 0.277

dann würde es also 3.1415 * 0.277 heißen müssen?
oder könnte ich es auch einfach ganz normal ins bogenmaß umrechnen?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

27.07.2008, 18:01

Zitat von »"defaultplayer^^

Das heißt, hätte ich ne Rotation von 50°, dann bräuchte ich wieder die 180°, also die 3.1415 und:

50*x = 180
x = 180/50 = 3.6

y = 1/3.6 = ca. 0.277

dann würde es also 3.1415 * 0.277 heißen müssen?
oder könnte ich es auch einfach ganz normal ins bogenmaß umrechnen?


Das ist ja dasselbe, wie das Bogenmass, nur ein wenig anderst geschrieben. ;)

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

9

27.07.2008, 18:02

Zitat

Das ist ja dasselbe, wie das Bogenmass, nur ein wenig anderst geschrieben.


jo, er hatte es ja nicht verstanden, deswegen ging ich da sop nativ ran wie möglich ohne groß auszuschweifen.

10

27.07.2008, 18:11

Gut, dann könnte ich also auch "50 * pi / 180" rechnen?
Dann hätte ich jetzt die Frage, wieso dort etwas anderes rauskommt?

Bei deinem Beispiel kamst du bei 22,5° auf 0.125. Wenn ich 22,5 * 3,14 / 180 rechne, dann kommt 0.3925 raus. Bei dem großen Ausmaß kann das auch eigentlich keine Pi-Ungenauigkeit mehr sein, oder?

Werbeanzeige