Rotation von Objekten um ein Raumschiff

BraunBerry

Mitglied
Hallo Community,

In meinem Spiel gibt es ein Raumschiff, dass durch den Weltraum fliegen kann. Das Schiff ist im Fenster zentriert. Überall auf dem Bildschirm sind Images, also Sterne verteilt, die sich mit verschiedenen Geschwindigkeiten bewegen, wenn das Schiff gesteuert wird. So entsteht eine Scheinbare Bewegung des Schiffs. Jetzt würde ich gern einfügen, dass man das Schiff nach links oder rechts "drehen" kann. Dazu wollte ich versuchen die verschiedenen Sterne auf einer Kriesbahn um das Schiff zu bewegen. Zu Anfang werden die Sterne mit Hilfe von festgelegten Koordinaten auf dem Bildschirm positioniert. Danach habe ich versucht die Entfernung jedes einzelnen Sternes bis zum Schiff zu berechnen und diese dann als Rotationsradius zu benutzen:

Java:
public static void initRotation(){
StarsRadius[0] = (int) Math.sqrt(Math.pow((coordsY[0] - StarsOriginY), 2) + Math.pow((coordsX[0] - StarsOriginX), 2));
}

was allerdings nicht so richtig funktionieren will.

In einem Timer versuche ich dann die Sterne zu rotieren:

Java:
@Override
   public void actionPerformed(ActionEvent e) {
     if (e.getSource() == StarsRotationTimer){
       coordsX[0] = (int) (StarsOriginX + StarsRadius[0] * Math.sin(StarsAlpha));
       coordsY[0] = (int) (StarsOriginY + StarsRadius[0] * Math.cos(StarsAlpha));
       StarsAlpha += Spaceship.RotationSpeed;
       if (StarsAlpha >= 2*Math.PI){StarsAlpha = 0.01;}
     }
   }

Das Problem:
1. Die Radien werden falsch berechnet
2. Ich denke ich muss irgendwie den Alpha-Winkel von jedem Stern in seiner Anfangsposition herausbekommen

Ich wäre euch dankbar, wenn ihr mir sagen könntet wie ich das Problem beheben kann oder welche Möglichkeiten es noch gibt, Objekte auf einer Kreisbahn zu rotieren.

lg BraunBerry
 

BRoll

Bekanntes Mitglied
Hi, wenn ich es richtig verstanden habe ist es doch ganz einfach:

  1. Abstand eines Sterns zum Raumschiff ausrechnen zb. Mit Point2D.distance
  2. Den aktuellen Rotationswinkel ausrechnen zb. mit Math.atan2(sterny-schiffy,sternx-schiffx)
  3. Winkel um beliebigen Wert erhöhen (je nach geschwindigkeit eben)
  4. Neue Position ausrechnen mit sternx=schiffx+Math.cos(winkel)*abstand und sterny=schiffy+Math.sin(winkel)*abstand
 

BraunBerry

Mitglied
Ok das Prinzip verstehe ich. Allerdings weiß ich leider nicht wie die ersten 2 Sachen angewandt werden.
Um ein Codebeispiel wäre ich dankbar :D
 

BRoll

Bekanntes Mitglied
Hab doch den notwendigen code dazugeschrieben? Naja dann pack ich dir nochmal alles hintereinander dann sollte es verständlicher sein:
Java:
        double schiffx=10,schiffy=50;
        double sternx=300,sterny=400;      
        double abstand=Point2D.distance(sternx, sterny, schiffx, schiffy);   
        double winkel=Math.atan2(sterny-schiffy, sternx-schiffx);
        winkel=winkel+5;
        sternx=schiffx+Math.cos(winkel)*abstand;
        sterny=schiffy+Math.sin(winkel)*abstand;
 

BraunBerry

Mitglied
Tut mir Leid, dass ich mich erst so spät wieder melde aber nach längerem Probieren hab ich einen Fehler entdeckt. Sobald ich umherfliege und das Raumschiff gleichzeitig rotiere verlagern sich die Sterne immer weiter Richtung Mitte. Ich vermute, dass das mit der Bewegungsanimation zusammenhängt, bei der ein Stern, der sich z.B. aus dem unteren Bildschirmrand hinausbewegt wieder zum oberen Bildschirmrand zurückgesetzt wird.

Java:
if (coordsY[0] > Application.HEIGHT){coordsY[0] = 0;}
if (coordsX[0] > Application.WIDTH){coordsX[0] = 0;}

So werden die Sterne nochmal generell bewegt:

Java:
coordsX[0] += SPEEDX;
coordsY[0] += SPEEDY;

als Alternative hatte ich mir überlegt, dass ich quasi den ganzen Weltraum (der möglicherweise mehrere Hunderttausend Pixel groß ist) mit Sternen zupflastern könnte und diese dann alle um mein Raumschiff rotieren könnte. Allerdings habe ich keine Lust, für jeden einzelnen Stern extra Koordinaten und eine draw Klausel zu schreiben. Ich würde die grundlegenden Koordinaten der Sterne beibehalten und diese dann erneut nur um eine Fenstergröße verschoben zeichnen. Ob das der Performance allerdings so gut tut wäre die andere Frage.

Ich vermute, dass ich hier um eine Schleife nicht herumkommen werde aber das ist nur eine Hypothese. Damit das Spiel nicht zu sehr belastet wird, würde ich einen Stern nur zeichnen, wenn er auch auf dem Bildschirm zu sehen wäre. Allerdings schrecken mich die vielen if Bedingungen ab. xD Vielleicht gibt es hier auch eine Möglichkeit das einfacher zu regeln.

Wisst ihr, wie ich entweder verhindern kann, dass sich die Sterne zur Mitte hin verlagern, oder wie ich eine performanceschonende und möglichst schreibfreundliche Methode zur kompletten Bedeckung mit Sternen einbauen kann?

Schonmal Danke im Voraus

lg BraunBerry :D
 

BRoll

Bekanntes Mitglied
Also ohne den Code kann ich das Problem schlecht analysieren. Gibt einfach zu viel das man falsch machen kann und ich weiß auch nicht wie du die Sterne jetzt genau umgesetzt hast. Aber egal wie du es gerade löst, wieso brauchst du für jeden Stern eine eigene "draw Klausel"? Und natürlich kommst du nicht um eine Schleife herum, da du mehr als einen Stern hast. Und natürlich zeichnet man nur, wenn man es auch (zumindest ansatzweise) sieht. Und verstehe ich das richtig, dein Raumschiff dreht sich nicht, sondern stattdessen die komplette Welt um es herum? Wenn man dir wirklich helfen soll, wirst du wohl nicht drumrum kommen dein Projekt mal hochzuladen ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
BraunBerry Rotation mit Radiusänderung Spiele- und Multimedia-Programmierung 0
E Rotation um Bildmittelpunkt ohne Affine Transform!!!!! Spiele- und Multimedia-Programmierung 13
RalleYTN LWJGL Rotation Spiele- und Multimedia-Programmierung 1
P Rotation von Sprite klappt nicht Spiele- und Multimedia-Programmierung 4
J Java 3d Rotation Spiele- und Multimedia-Programmierung 6
B j3d Rotation um mehr als eine Achse Spiele- und Multimedia-Programmierung 9
B j3d Kamera Rotation durch Tastendruck Spiele- und Multimedia-Programmierung 12
H Rotation auf Knopfdruck Spiele- und Multimedia-Programmierung 20
T [gelöst] Java3D: Unerwünschte Rotation um die 3.Achse vermeiden? Spiele- und Multimedia-Programmierung 3
W Rotation aller Objekte einer 3D-Szene Spiele- und Multimedia-Programmierung 8
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
E Tetris: Rotation der Tetrominos Spiele- und Multimedia-Programmierung 4
C Java3D Rotation um einen Punkt (y-achse) Spiele- und Multimedia-Programmierung 2
aze Transform3D - dauerhafte Rotation Spiele- und Multimedia-Programmierung 3
J Hilfe: Rotation X und Y Achse (Java3d) Spiele- und Multimedia-Programmierung 12
C JAVA3D Rotation um einen bestimmten Punkt Spiele- und Multimedia-Programmierung 20
"Er" Kamera rotation in Java3D Spiele- und Multimedia-Programmierung 2
R Tetris Rotation? Spiele- und Multimedia-Programmierung 7
P Figur Rotation Spiele- und Multimedia-Programmierung 14
G rotation eines würfels Spiele- und Multimedia-Programmierung 9
T Java3D: Rotation und Translation Spiele- und Multimedia-Programmierung 2
S Rotation relativ zur Rotation einer anderen Transform Group Spiele- und Multimedia-Programmierung 3
S Rotation um verschobene Achse Spiele- und Multimedia-Programmierung 7
Quaxli Java 3D - Rotation mit Alpha Spiele- und Multimedia-Programmierung 2
H Probleme bei Rotation Spiele- und Multimedia-Programmierung 9
P Rotation von BufferedImage (Affine Transformation) Spiele- und Multimedia-Programmierung 7
J Problem mit Rotation (Sprite3D) Spiele- und Multimedia-Programmierung 4
S Punkt berechnen, nach Rotation Spiele- und Multimedia-Programmierung 2
W Rotation eines Objektes Spiele- und Multimedia-Programmierung 2
W 3d-rotation Spiele- und Multimedia-Programmierung 4
A 2-Achsen Rotation eines Würfels Spiele- und Multimedia-Programmierung 4
M JPanel mit Graphics2D Objekten mit JScrollpane Spiele- und Multimedia-Programmierung 6
R Verschieben von Objekten langsam Spiele- und Multimedia-Programmierung 0
S [lwjgl] Renderbug bei mehreren Objekten Spiele- und Multimedia-Programmierung 2
F Kollisionsabfrage bei schnellen Objekten Spiele- und Multimedia-Programmierung 2
M Collisions mit festen Objekten Spiele- und Multimedia-Programmierung 8
P "Tiefe" in Objekten - LWJGL Spiele- und Multimedia-Programmierung 12
W Java3D: Farbe von Objekten stimmt nicht mit übergebenem RGB-Wert überein Spiele- und Multimedia-Programmierung 9
M [Java3D] Animation von mehreren Objekten Spiele- und Multimedia-Programmierung 7
StrikeTom Schwerkraft mit festen objekten darstellen Spiele- und Multimedia-Programmierung 27
B Kollisionserkennung bei gezeichneten Objekten Spiele- und Multimedia-Programmierung 2
L Platzieren von Objekten auf TileMap Spiele- und Multimedia-Programmierung 6
P Culling von Image-Objekten Spiele- und Multimedia-Programmierung 3
B 1)JButtons zeichnen 2)Kolisionsabfrage von zwei Objekten Spiele- und Multimedia-Programmierung 9
D Array aus Objekten Spiele- und Multimedia-Programmierung 2
V Koordinaten von Objekten? Spiele- und Multimedia-Programmierung 8
J Kollision von Objekten Spiele- und Multimedia-Programmierung 7
J Simulation mit vielen Objekten: Datenbank? Spiele- und Multimedia-Programmierung 6
F Bewegung/Kollision von Objekten auf Tastendruck Spiele- und Multimedia-Programmierung 6
G Bewegen von Objekten Spiele- und Multimedia-Programmierung 4
B Hilfe gesucht!! (bewegen von grafischen Objekten) Spiele- und Multimedia-Programmierung 3
S Spielvorstellung: Raumschiff Spiele- und Multimedia-Programmierung 6
R Raumschiff in die Richtung fliegen in die es schaut ? Spiele- und Multimedia-Programmierung 14

Ähnliche Java Themen


Oben