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

16.08.2009, 22:06

Rakete - fester Punkt am Raumschiff

Hi,
ich will mein 2D Game sehr "realistisch" gestalten, und deshalb die Raketen schon vor dem Abschuss auf die richtige Position meiner F16 setzen - als Beispiel jetzt einmal ein Punkt unter dem linken Flügel.

Ich hab dafür den Punkt ausgerechnet:

C-/C++-Quelltext

1
2
3
4
5
6
7
float TempPositionX = Ship->GetPositionX();
float TempPositionY = Ship->GetPositionY();

TempPositionX += (Ship->GetWidth() / 4 - 1);
TempPositionY += (Ship->GetHeight() / 2) - 11;

Rakete->SetPosition(TempPositionX, TempPositionY);


Das ist hier:

(Link)
Dieser Post wurde aus artgerecht gehaltenen, 100% chlorfrei gebleichten, handelsüblichen Elektronen aus Freihaltung erzeugt.

2

17.08.2009, 08:46

Du musst die Rakete erst in der Originalausrichtung verschieben und dann wie das Flugzeug drehen.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

17.08.2009, 12:33

Oder du arbeitest mit Joins. Sprich du definierst am Modell Punkte wo die Rakete hinsoll (mit Ausrichtung) und setzt das Raketenmodell dann immer dahin. Verbinden lässt sich das mit dem sehr einfachen Ansatz, dass man die Weltmatrix von einem Objekt einfach mit der Objektmatrix eines Unterobjekts multipliziert, wobei ich mir gerade nicht ganz sicher bei der Reihenfolge bin. Also einfach:
Matrix der Rakete im Raum des Fliegers = Rotation, Translation, Skalierung;
Matrix des Fliegers in der Welt = Rotation, Translation, Skalierung;
Matrix der Rakete in der Welt = Matrix des Fliegers in der Welt * Matrix der Rakete im Raum des Fliegers (ggf. auch andersrum. Da bn ich mir gerade nciht sicher).


P.S: Ups total übersehen dass es um 2D geht. Da ist chriss Ansatz natürlich wesentlich einfacher.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

4

18.08.2009, 23:39

Es funktioniert! danke
Dieser Post wurde aus artgerecht gehaltenen, 100% chlorfrei gebleichten, handelsüblichen Elektronen aus Freihaltung erzeugt.

killmichnich

unregistriert

5

26.08.2009, 11:04

also ich weiß nich Arrows muss schlauer sein als ich .. aber ich blick das nich so ganz:
"Du musst die Rakete erst in der Originalausrichtung verschieben und dann wie das Flugzeug drehen."
Könnte mir das mal einer etwas "Noobfreundlicher" erklären, weil ich steh grad vor dem selben Problem =)

MfG Killmichnich

6

26.08.2009, 15:22

Zeichne dir mal ein Koordinatensystem auf ein Blatt papier.

Wenn du dort in die Mitte gehst und einen Kreis zeichnest, bekosst du einen Punkt, da der Abstand zum Ursprung 0 ist.

Gehst du mit dem Stift aber erst entlang der x und oder y Richtung und zeichnest dann einen Kreiis um den Urspung, so bekommst du einen Kreis.

Mit sin und cos bekommst du dann einen Punkt auf dem Kreis.


Jetzt stell dir vor, das dein Raumschiff ist in der Mitte. Deine Rakete ist der Stift. Wenn du sie jetzt entsprechend auf dem Schiff (=Koordinatensystem) verschiebst und dann einen Kreis auf dem Koordinatensystem lang gehst, so bist du immer auf einem Punkt in dem Kreis.


Rotierst du jetzt das Raumschiff um Ursprung und verschiebst die Rakte auf dem Kreis um den Ursprung, so befindet sich die Rakete immer an der gleichen Stelle des Raumschiffes.


Eventuell hilft dir das hier:
http://www.schule-studium.de/Mathe/Sinus-im-Einheitskreis.html

killmichnich

unregistriert

7

26.08.2009, 16:10

ah ok thx ich glaub jetzt hab ichs kapiert =)

8

30.08.2009, 20:42

Hier mal eine nähere Erklärung:

Wenn du in DirectX programmierst, nimmst du auch zur 2D Drehung eine Matrix:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
    D3DXMatrixTransformation2D(
        &Matrix,
        reinterpret_cast<D3DXVECTOR2*>(&m_vCenter),
        0.0f,
        &m_vScale,
        reinterpret_cast<D3DXVECTOR2*>(&m_vCenter),
        m_Rotation,
        reinterpret_cast<D3DXVECTOR2*>(&m_vPosition));


Jetzt nimmst du einfach statt m_vCenter (Der Mittelpunkt der Rakete) den Mittelpunkt des Raumschiffes, das gleiche bei m_vPosition.
Dieser Post wurde aus artgerecht gehaltenen, 100% chlorfrei gebleichten, handelsüblichen Elektronen aus Freihaltung erzeugt.

killmichnich

unregistriert

9

30.08.2009, 20:53

uiii echt coool ... reicht das wirklich schon wenn ich bei der rakete den mittelpunkt der raumschiffs angeb? ... thx das wusst ich auch noch noch nich ... ich hätt das jetzt halt alles selber nachgerechnet ^^

Werbeanzeige