F
froogi
Gast
hallo,
hab mal ein Applet gemacht, wo ein kleiner Ball sich bewegt, nun habe ich das mit Swing gemacht, doch ist es ziemlich langsam. Kann das sein, oder habe ich was falsch gemacht?? danke
Auch mit dem Thread klappt es nicht so wie es sollte, wenn ich Thread.sleep(20) eingebe, oder Thread.sleep(5)
hat es gar keine Auswirkung?? irgendwas stimmt nicht??
hier der Code:
hab mal ein Applet gemacht, wo ein kleiner Ball sich bewegt, nun habe ich das mit Swing gemacht, doch ist es ziemlich langsam. Kann das sein, oder habe ich was falsch gemacht?? danke
Auch mit dem Thread klappt es nicht so wie es sollte, wenn ich Thread.sleep(20) eingebe, oder Thread.sleep(5)
hat es gar keine Auswirkung?? irgendwas stimmt nicht??
hier der Code:
Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class Main extends JFrame implements Runnable{
private static final long serialVersionUID = 1L;
private static int pos_X=40;
private static int pos_Y=40;
public static int richtung_HORIZONTAL =0;
public static int richtung_VERTIKAL =0;
private static final int WIDTH=800;
private static final int HEIGHT=600;
private Image dbImage;
private Graphics gr;
public BufferedImage im1,backround;
Thread th;
public Main(){
addKeyListener(new Controller(this));
im1= ladeBilder("bus1.jpg");
backround= ladeBilder("Desert.gif");
th = new Thread(this);
th.start();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(WIDTH,HEIGHT);
setVisible(true);
}
public void paint(Graphics g) {
g.drawImage(backround,0,0,this);
g.drawImage(im1,pos_X,pos_Y,this);
}
public void update (Graphics g)
{
// Initialisierung des DoubleBuffers
if (dbImage == null)
{
dbImage = createImage (this.getSize().width, this.getSize().height);
gr = dbImage.getGraphics ();
}
// Bildschirm im Hintergrund löschen
gr.setColor (getBackground ());
gr.fillRect (0, 0, this.getSize().width, this.getSize().height);
// Auf gelöschten Hintergrund Vordergrund zeichnen
gr.setColor (getForeground());
paint (gr);
// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
g.drawImage (dbImage, 0, 0, this);
}
// Bilder über url laden
public BufferedImage ladeBilder(String bildname){
URL url= null;
try{
url= getClass().getClassLoader().getResource(bildname);
return ImageIO.read(url);
}
catch (Exception e) {
System.out.println("Image nicht gefunden " + bildname+" in "+url);
System.out.println("Fehler von : "+e.getClass().getName()+" "+e.getMessage());
System.exit(0);
return null;
}
}
public void moveBus(){
while(true){
if(pos_X<10 || pos_X>WIDTH-20){ richtung_HORIZONTAL=-richtung_HORIZONTAL;}
else if(pos_Y<10 || pos_Y>HEIGHT-20){ richtung_VERTIKAL=-richtung_VERTIKAL;}
pos_X +=richtung_HORIZONTAL;
pos_Y +=richtung_VERTIKAL;
repaint();
}
}
public void run() {
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
moveBus();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
public static void main(String[] args) {
new Main();
}
}