Rotieren eines Objekts (2D)

GeRrItK.

Mitglied
Hallo Leute,

ich programmiere seit kurzem mit Java und habe das Tutorial von Quaxli mal durchgearbeitet. Ich habe das nun soweit fertig und mir schon aus dem Hubschrauber nen Auto gebastelt und aus den Raketen andere Autos und nen paar Besonderheiten eingefügt.

Nun möchte ich mein Auto "richtig" steuern. Also wenn ich Rechts drücke das sich das Auto nach rechts dreht. Wie kann ich das bewerkstelligen? Zudem muss die Berechnung der Bewegung dann ja auch anders aussehen. Wie berechnet man das ganze dann?

Man muss dann ja anhand der Rotation die Verschiebung auf X und Y Achse berechnen? Leider bin ich bisher nur auf die Idee gekommen die beiden Katheten des dadurch entstehenden Dreiecks zu berechnen und das Auto anhand dieser Werte zu bewegen. Dies schien mir aber auch nicht wirklich sinnvoll, da das Auto dann ja nicht die Hypothenuse abfährt sondern einen Bogen.

Ich hoffe auf Hilfe 🙂

Gruß,
Gerrit
 
Hmm ich hab mir das jetzt ein wenig durchgelesen und so aber iwie steig ich nicht durch wie man damit nen Objekt drehen kann? 😵 Sieht für mich alles iwie eher aus wie Animation und Kurvengleichungen 😀
 
Ich hab das in einem früheren Projekt einmal mit folgenden Formeln gemacht:

Java:
int xSpeed = Math.cos(angleOfMovementInRadians) * straightForwardSpeed;
int ySpeed = Math.sin(angleOfMovementInRadians) * straightForwardSpeed;

Dann bei der Bewegung der Spielfigur x und y getrennt mit der jeweiligen Geschwindigkeit bewegen.

Dazu musst du dann das Auto eben irgendwie drehen, dass hängt von deiner Zeichentechnik, ab wie du dass am besten realisierst, die Klasse Graphics2D bietet da durchaus einige Methoden zur Rotation.
 
Wenn ich jetzt noch wüsste wie ich mein Auto drehen kann dann könnte man es ja glatt mal austesten 😀

EDIT:

Bei Tastendruck habe ich jetzt folgenden Code:
Java:
xSpeed = (int) Math.cos(Math.toRadians(45)) * speed;
ySpeed = (int) Math.sin(Math.toRadians(45)) * speed;
rtw01.setHorizontalSpeed(xSpeed);
rtw01.setVerticalSpeed(ySpeed);

Allerdings bewegt sich mein Auto keinen Zentimeter?!

EDIT²:

Habs nun. Den Datentyp auf Double geändert. ^^ jetzt fehlt nurnoch meine Drehmethode 😀
 
Zuletzt bearbeitet:
Was genau fehlt dir noch ?
Das Auto muss seine aktuelle Drehung im Bogenmaß plus seine Geschwindigkeit kennen, und wird dann nach den Formeln bewegt.
Die Drehung wird von Pfeil links und rechts beeinflusst.

Beim Zeichnen wird die Grafik jeweils gedreht gezeichnet, dass geht bei Verwendung von der Graphics-Klasse (die verwendet Quaxlis Tutorial doch ?!) z.B. so:
Java:
        AffineTransform af = g2d.getTransform();
        g2d.rotate(angleInRadians, centerOfCarX, centerOfCarY);

        g2d.drawImage(...);

        g2d.setTransform(af);

EDIT:

Die konstante 45 ist da ein wenig Witzlos, wenn du das Auto dynamisch drehen willst, das ist dir klar, oder ?

Es müsste eher so aus sehen:

//Reaktion auf Pfeil rechts:
carAngle += 0.1; // Wert ist geraten, frag mich nicht wie schnell das sich bei 0.1 jetzt drehen wird.

bei Pfeil Links eben -= statt +=. Wobei auch das könnte andersrum sein.

Dann anhand des neuen Winkels die Geschwindigkeit für x und y berechnen und diese verwenden.
 
Zuletzt bearbeitet:
Ja die konstante war nur zum testen 😉 Mein Auto kann jetzt schonmal seine Runden drehen nur halt mit der Nase in die falsche Richtung 😀

Die Graphics Methode sieht so aus:
Java:
public void drawObjects(Graphics g) {
g.drawImage(pics[currentpic], (int) x, (int) y, null);
}

Was müsste ich da jetzt alles neu definieren?!
 

Neue Themen


Zurück
Oben