Bewegung innerhalb eines Koordinatensystems berechnen

Ghorki

Aktives Mitglied
Hallo Leute,

ich komme gerade nicht wirklich weiter (könnte eventuell auch an der Uhrzeit liegen), aber es wäre echt super, wenn mir jemand weiterhelfen könnte. 🙂

Und zwar habe ich ein Koordinatensystem, dass oben Links mit 0 beginnt.
Nun habe ich einen Startpunk(50,1), und einen Zielpunkt(20,20).

Wie kann ich jetzt nach und nach den direkten Weg zum Zielpunkt berechnen und zurücklegen?
Die Methode soll natürlich nicht nur Richtung Links sondern in alle Richtungen funktionieren.

Schonmal vielen Dank für euren Denkanstoß.

MfG
Ghorki
 
Wie kann ich jetzt nach und nach den direkten Weg zum Zielpunkt berechnen und zurücklegen?
was heißt "direkten Weg ... zurücklegen"? Soll sich da etwas von Punkt S nach Punkt Z bewegen? Die Richtung wird ja über den Vektor SZ bestimmt
Code:
SZ = (Zx - Sx)
     (Zy - Sy)

==> v = (-30 | 19)
Daraus gegebenenfalls den Einheitsvektor bilden und diesen mit gewüschten Einheiten pro Zeiteinheit multiplizieren.
 
Ist den der Begriff Vektor aus Mathe oder Physik bekannt?
Allgemein ausgedrückt musst Du bestimmten um wie viel sich das Objekt in x und y Richtung bewegen muss, um von Punkt S(tart) zum Punkt Z(iel) zu kommen. Dann musst Du wissen wie viel Strecke das Objekt pro Zeiteinheit zurücklegen kann - also die Geschwindigkeit des Objektes. Um damit zu berechnen um wie viele Schritte man das Objekt jeweils in x und y Richtung versetzen muss.
 
Soo, ich habe mich jetzt mal in die Theorie eingelesen und habe es mir auch erklären lassen,
nur scheitert es jetzt einwenig an der Umsetzung.

Um näher auf meinen Code einzugehen.
Wenn ich mein Smarthphone Display berühre, wird folgender Code aufgerufen:

Java:
Main.class

Waffe.werfen(touchX, touchY);

Java:
Waffe.class

float targetX;
float targetY;

float x;
float y;

public static void werfen(float touchX, float touchY)
{
     targetX = touchX;
     targetY = touchY;
     wurfBool= true;
}


private void wurf()
{
     if(wurfBool == true)
     {
          
          // Code der die Waffe bewegen lässt
          x = 
          y =

          // Waffe neu Zeichnen
          getWaffe().setX(x);
          getWaffe().setY(y);
     }
}

// Dauerschleife
public void update()
{
     wurf();
}


Ich weiß auch nicht, wie ich den Richtungsvector mit einbringen muss...
 
Da scheint noch einiges im Argen. Mit dem Code kann ich nicht viel anfangen.
Bevor Du Dich mit Android auseinandersetzt, schadet es nicht sich mit den Java Grundlagen auseinander zu setzen. Die sind auch unter Android gültig.
Die static void werfen ist falsch, sie kann höchstens funktionieren wenn es nur eine Waffe gibt. Die Methode sollte eine Instanzmethode sein und ob die in der Klasse Waffe am richtigen Platz ist, ist auch fraglich.
"Dauerschleife" hört sich auch gefährlich an. Vor allem bei Smartphone Apps sollte man darauf achten die Resourcen zu schonen.

Ein Tutorial für 2D Spiele findest Du hier: http://www.java-forum.org/spiele-multimedia-programmierung/54795-quaxli-2d-spiele-tutorial.html
Ist zwar nicht Android, aber auch unter Android gelten die selben Grundprinzipien.
 
Java:
int startX = ...
int startY = ...
int targetX = touchX;
int targetY = touchY;

for (int i=0; i<steps; i++)
{
    float alpha = (float)i/(steps-1);
    float fx = startX + alpha * (targetX - startX);
    float fy = startY + alpha * (targetY - startY);

    paintAt((int)fx, (int)fy);
}
das ganze müßte aber vermutlich in einem eigenen Thread oder über einen Timer gesteuert laufen, sonst wird man da keine Animation sehen....
 
Die update Methode wird automatisch mitgeliefert, wenn man von einem Sprite Objekt erbt, um Sachen wie animationen etc darzustellen. (Ich benutzte eine 2D Engine)

Mit der Instanzmethode hast du natürlich recht, hab ich aber nicht hinbekommen, deswegen hab ich die vorübergehend static gemacht...

Java:
Spirte waffe = new Waffe(...)

Ich kann so aber keine Methoden aus der Klasse Waffe aufrufen.
 
Wie gesagt, die Methode wurf und die Berechnung der Position zu einem bestimmten Zeitpunkt gehört nicht in die Klasse Waffe, das muss ausserhalb passieren.
Wenn Du eine 2D Engine verwendest, gibst da bestimmt auch ein Tutorial/Dokumentation dazu.
 
Nicht
Spirte waffe = new Waffe(...)
sondern
Waffe waffe = new Waffe(...)

Wo genau die Berechnung hingehört, darüber kann man streiten. Wenn es eine update-Methode gibt, die regelmäßig aufgerufen wird, muss man IN dieser Methode (ausgehend von der aktuellen Zeit, z.B. per System.nanotime ermittelt) die neue Position berechnen. Wenn das ganze noch realisitisch in einer Parabel fliegen soll, braucht man nur eine Position und eine Geschwindigkeit (ähnlich wie die "Particle"-Klasse in http://www.java-forum.org/mathematik/130544-formeln-fuer-einfache-schwerkraft-2.html#post865782 )
 

Zurück
Oben