Hallo liebe Freunde,
ich komme wieder mal an einer Stelle nicht mehr weiter und bräuchte darum eure Hilfe.
Das Problem:
Nachdem ich es nun geschafft habe einen JPanel zu animieren (zu bewegen), will ich jetzt nun, dass er sich direkt zu einer Position bewegt. D.h., wenn ich irgend eine Position angebe und die Methode aufrufe soll er sich zu der Position bewegen (auch diagonal). Ich habe die ganze Zeit versucht, dass irgendwie alleine hinzukriegen, bin aber leider nicht weitergekommen. So sieht mein Code aus:
Die Klasse ist in einem JPanel und jedes Mal, wenn ich die Methode panelAnimation() aufrufe wird ein neuer Thread gestartet.
ich komme wieder mal an einer Stelle nicht mehr weiter und bräuchte darum eure Hilfe.
Das Problem:
Nachdem ich es nun geschafft habe einen JPanel zu animieren (zu bewegen), will ich jetzt nun, dass er sich direkt zu einer Position bewegt. D.h., wenn ich irgend eine Position angebe und die Methode aufrufe soll er sich zu der Position bewegen (auch diagonal). Ich habe die ganze Zeit versucht, dass irgendwie alleine hinzukriegen, bin aber leider nicht weitergekommen. So sieht mein Code aus:
Die Klasse ist in einem JPanel und jedes Mal, wenn ich die Methode panelAnimation() aufrufe wird ein neuer Thread gestartet.
Java:
private class JPanelThread extends Thread {
private double x;
private double y;
private double v;
JPanel panel;
Point point;
public JPanelThread(JPanel panel, Point point) {
this.panel = panel;
this.point = point;
x = panel.getLocation().x - point.x;
y = panel.getLocation().y - point.y;
v = Math.sqrt(x*x+y*y);
x/=v;
y/=v;
}
public void run() {
boolean status = false;
int yjetzt = panel.getLocation().y;
int xjetzt = panel.getLocation().x;
while (!status) {
try {
sleep(20);
panel.setLocation(xjetzt, yjetzt);
repaint();
if (xjetzt < point.x) {
xjetzt += x;
} else if (xjetzt > point.x){
xjetzt -= x;
}
if (yjetzt < point.y) {
xjetzt += y;
} else if (yjetzt > point.y){
xjetzt -= y;
}
if (xjetzt == point.x && yjetzt == point.y) {
status = true;
}
} catch (InterruptedException e) {
}
}
}
}
public void panelAnimation(JPanel panel, Point point) {
thread = new JPanelThread(panel, point);
thread.start();
}