Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Die "Höhe" von B ist die Gegenkathete zu alpha im rechtwinkligen Dreieck (das entsteht, wenn man von B senkrecht nach unten zeichnet). Hypothenuse ist natürlich r.
Analog gilt für den "horizontalen Abstand" (die Ankathete):
cos(alpha) = Ankathete / Hypothenuse
Ankathete = Hypothenuse * cos(alpha)
Also: B.x = A.x - r*cos(alpha) [zumindest wenn B wie in der Zeichnung links von A sein soll]
Hey danke, das hätte ich mit meinen trigonometrischen kenntnissen nicht hinbekommen.
Danke für den Link, ich werd da erst noch mal alles lesen müssen bevor ich weiter programmiere.
Also ich will sowas wie Astroids, wers kennt, programmieren.
Ich hatte mir überlegt, erstmal, dass ich wie in der Physik 2 Variablen habe, f_UP (Kraft die den Körper (das Schiff) nach oben drückt, bzw. bei negativem Wert nach unten) und f_LEFT (Kraft die den Körper (das Schiff) nach links drückt, bzw. bei negativem Wert nach rechts).
Das mit up und down klappt schon super.
Bei left bzw. right habe ich die funktion eingebaut, dass das schiff sich dreht.
Aber die vorwärts beschleunigung soll sich auf den Körper auch auf seine rotation beziehen.
Wie könnte ich das anstellen?
Ich habe mir überlegt, in einem Thread, jedes mal von der X und Y Koordinate f_UP und f_LEFt zu addieren.
f_UP und f_LEFT werden also mit Berechnungen geändert.
Nun dachte ich mir, >>wie könnte ich das anstellen?<<.
Java:
public void run()
{
int counter = 0;
while(true)
{
repaint();
keyInteraction();
maneuver();
if(counter==5)
{
shotInteraction();
counter = 0;
}
else
counter++;
try{Thread.sleep(10);}catch(Exception e){}
}
}
public void maneuver()
{
double x = (mouseX - shipX) / (double) d.width;
double y = (mouseY - shipY) / (double) d.height;
shipRot = Math.toRadians((Math.PI * ((y < 0)? 1 : 2) - Math.atan(x / y)));
shipX += f_LEFT;
shipY += f_UP;
if(shipY<0)
shipY = d.height;
else if(shipY>d.height)
shipY = 0;
if(shipX<0)
shipX = d.width;
else if(shipX>d.width)
shipX = 0;
}
public void keyInteraction()
{
if(left)
f_LEFT -=0.05;
if(right)
f_LEFT +=0.05;
if(up)
f_UP -= 0.05;
if(down)
f_UP += 0.05;
}
// left, right, up und down sind booleans, sie werden aktiviert bei
// Tasten betätigung, und werden deaktiviert, bei Tasten enttätigung.
// f_LEFT und f_UP sind double.
Ich hatte mit der Lösung hier in diesem Thread gedacht, ich hätte die Lösung für mein Problem.
Einfach die x und y koordinaten vom neuen Punkt vom Alten Punkt subtrahieren, und diese dann zu f_UP bzw. f_LEFT zu addieren. Aber das hatte nicht wirklich funktioniert. Hat einer von euch eine Idee, wie man dieses Problem angehen könnte?