Hey, folgender Code soll den Abstand zwischen Spieler und Maus errechnen und dann die Position des Spielers immer mehr dem der Maus annäheren.
Meine Formel möchte ich hier noch herleiten:
Dieser Code sollte eigentlich genau das machen, klappt aber nicht ;D
Der rastet mir da total aus. Bei einigen Grenzfällen kommt hin und wieder jedoch Sinnvolles zum Vorschein, beispielweise bei hohen speedbetrag und niedriger refrehsrate
Meine Formel möchte ich hier noch herleiten:
vy = Geschwindigkeit in y Richtung
vy = Geschwindigkeit in x Richtung
Betrag(v) = Wurzel(vx^2 + vy^2)
Es gilt (um sich direkt zur Maus zu bewegen), dass
x/y (Abstände Maus Spieler) = vx/vy, demnach ergibt sich
vx = vy*(x/y)
Einsetzen:
Betrag(v) = Wurzel(vy*(x/y)^2 + vy^2)
(Betrag von v) ^2 = (vy*x/y)^2 + (vy)^2 {bx + nx = (b+n)x}
(Betrag von v)^2 = (1+x/y)vy
vy = (Betrag von v)^2/(1+x/y)
vx = vy*x/y
vy = Geschwindigkeit in x Richtung
Betrag(v) = Wurzel(vx^2 + vy^2)
Es gilt (um sich direkt zur Maus zu bewegen), dass
x/y (Abstände Maus Spieler) = vx/vy, demnach ergibt sich
vx = vy*(x/y)
Einsetzen:
Betrag(v) = Wurzel(vy*(x/y)^2 + vy^2)
(Betrag von v) ^2 = (vy*x/y)^2 + (vy)^2 {bx + nx = (b+n)x}
(Betrag von v)^2 = (1+x/y)vy
vy = (Betrag von v)^2/(1+x/y)
vx = vy*x/y
Dieser Code sollte eigentlich genau das machen, klappt aber nicht ;D
Java:
public void calculate() {
// Player p;
PointerInfo mi = MouseInfo.getPointerInfo();
//speedbetrag = 1pix/tick
double vx = mi.getLocation().getX() - p.getX(); //Werte der Vektoren
double vy = mi.getLocation().getY() - p.getY();
double yspeed = (Math.pow(1, 2)/(1 + vy/vx)); // y speed = geschwindigkeitsbetrag zum Quadrat/(1+yvonvector/xvonvector)
double xspeed = vy/vx*yspeed;
yspeed = Math.round(yspeed * 1000)/1000; //rundet 4 Kommastellen
xspeed = Math.round(xspeed * 1000)/1000;
p.setX(p.getX() + (xspeed)); // in jedem Tick wird xspeed addiert (v*t = s)
p.setY(p.getY() + (yspeed));
System.out.println("Sys:" + yspeed + " " + xspeed + " " + Math.pow((xspeed*xspeed + yspeed*yspeed), 0.5)); //3 Ergebnis muss näherungsweise speedbetrag sein
}
Der rastet mir da total aus. Bei einigen Grenzfällen kommt hin und wieder jedoch Sinnvolles zum Vorschein, beispielweise bei hohen speedbetrag und niedriger refrehsrate