Rakete und 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:
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:
[img=http://img411.imageshack.us/img411/5733/bild1zso.jpg](Der Rote Pfeil zeigt auf den "Kopf" der unter dem Flügel rausschaut)
Soweit kein Problem - aber die Rakete muss sich mitdrehenen, wenn sich mein Schiff dreht / bewegt - genau das ist das Problem an dem ich hier seit einem Tag sitze
Dafür hab ich eine Funktion gemacht, die die Rakete jeden Frame auf diesen Punkt setzen soll:
Rakete->SetRotation(Ship->GetRotation()); float TempPositionX = Ship->GetPositionX(); float TempPositionY = Ship->GetPositionY(); TempPositionX += (Ship->GetWidth() / 2) - (Rakete->GetWidth() / 2); TempPositionY += (Ship->GetHeight() / 2) - (Rakete->GetHeight() / 2); TempPositionX += sin(Ship->GetRotation()) * Ship->GetHeight() / 2; TempPositionY -= cos(Ship->GetRotation()) * Ship->GetHeight() / 2; Rakete->SetPosition(TempPositionX, TempPositionY);
Soweit bin ich jetzt - die Rakete ist genau vor dem Raumschiff (eigentlich knapp über dem Mittelpunkt, schaut aber vorne heraus) - aber wie kann ich die jetzt auf den "Raketenpunkt" unter den linken Flügel bringen?
Das hier hab ich schon probiert - erzeugt aber eine Ellipse:Rakete->SetRotation(Ship->GetRotation()); float TempPositionX = Ship->GetPositionX(); float TempPositionY = Ship->GetPositionY(); TempPositionX += (Ship->GetWidth() / 2) - (Rakete->GetWidth() / 2); TempPositionY += (Ship->GetHeight() / 2) - (Rakete->GetHeight() / 2); TempPositionX += sin(Ship->GetRotation() - 1.5f) * Ship->GetHeight() / 2; TempPositionY -= cos(Ship->GetRotation() - 0.1f) * Ship->GetHeight() / 2; Rakete->SetPosition(TempPositionX, TempPositionY);
Hoffe auf viele Antworten
mfg
-
Google mal nach dem Begriff Szenengraph. Das Konzept dürfte dir einiges erleichtern.
-
Arr0ws schrieb:
Rakete->SetRotation(Ship->GetRotation()); float TempPositionX = Ship->GetPositionX(); float TempPositionY = Ship->GetPositionY(); TempPositionX += (Ship->GetWidth() / 2) - (Rakete->GetWidth() / 2); TempPositionY += (Ship->GetHeight() / 2) - (Rakete->GetHeight() / 2); TempPositionX += sin(Ship->GetRotation() - 1.5f) * Ship->GetHeight() / 2; TempPositionY -= cos(Ship->GetRotation() - 0.1f) * Ship->GetHeight() / 2; Rakete->SetPosition(TempPositionX, TempPositionY);
Du solltest denselben Winkel innerhalb von sin und cos subtrahieren. Für eine Position links dürfte es PI/2 sein, also:
TempPositionX += sin(Ship->GetRotation() - MATH_PI/2) * Ship->GetHeight() / 2; TempPositionY -= cos(Ship->GetRotation() - MATH_PI/2) * Ship->GetHeight() / 2;
-
Hast du auf spieleprogrammierer.de nicht auch diese Frage gestellt...
-
Hobby Programmierer schrieb:
Hast du auf spieleprogrammierer.de nicht auch diese Frage gestellt...
was hat das bitte mit dem topic zu tun?