Pardon nevyřešil :(, Udělala jsem si třídu ShapeMover, která mi pohybuje s obrazcem. Ježe já jí chtěl udělat multifunkční, že bych do ní přidal odkaz na objekt, třeba čtverec a ona by mi ho posunula na nějaké souřadnice.
Hlavní ovládací třída
package ShapeMover;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
// Třída v níž se bude náchazet programy hry
public class gameClass {
public JFrame frame=new JFrame();
public paintClass paintC=new paintClass();
private Thread ThreadShapeMover2;
private int souradniceX2=0;
private int souradniceY2=0;
public gameClass(){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.getContentPane().add(paintC);
frame.setVisible(true);
posunObjektu(souradniceX2, souradniceY2);
}
//metoda, která volá posun objektu;
public void posunObjektu(int souradniceX2, int souradniceY2){
//Zavolání třídy ShapeMover v novám vlákně.
ThreadShapeMover2=new ShapeMover(this, souradniceX2, souradniceY2);
ThreadShapeMover2.start();
}
}
//vykreslovací třída
class paintClass extends JComponent{
//pozice objektu musí být typu double, protože se v counteru se nepříčítají celá čísla
public double poziceObjektuX=200;
public double poziceObjektuY=200;
public void paint(Graphics g){
g.fillRect((int)poziceObjektuX, (int)poziceObjektuY, 50, 50);
}
}
třída, která posouvá objekt
package ShapeMover;
//třída ShapeMover, která posouvá objekt
public class ShapeMover extends Thread {
private gameClass gameC=null;
private int souradniceX2;
private int souradniceY2;
private int souradnicovyDelitel=150;
//konstruktor, 3 parametry: odkaz na kmenovou přídu a souřadníce na níž se má onjekt přesunout
public ShapeMover(gameClass gameC, int souradniceX2, int souradniceY2) {
this.gameC=gameC;
this.souradniceX2=souradniceX2;
this.souradniceY2=souradniceY2;
}
//mnové vlákno volá metodu run
public void run(){
double counterY=souradniceX2-gameC.paintC.poziceObjektuX; counterY/=souradnicovyDelitel;
double counterX=souradniceY2-gameC.paintC.poziceObjektuY; counterX/=souradnicovyDelitel;
for(int x=0;x<souradnicovyDelitel;x++){
gameC.paintC.poziceObjektuX+=counterX;
gameC.paintC.poziceObjektuY+=counterY;
gameC.paintC.repaint();
try {
Thread.sleep(25);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}