Hallo zusammen,
ich versuche gerade ein Applet zu programmieren, in der eine Animation, mit Hilfe der Thread-Klasse, in einem Canvas von oben nach unten "laufen" soll.
Ich hab dazu einfach mal eine "Line" verwendet, die waagerecht liegt, und dessen y-Werte sich per Schleife nach unten bewegen.
Das Problem, dass ich nun habe, ist, dass daraus ein Rechteck wird, da die Linien mit den "älteren" y-Koordinaten nicht wieder verschwindet. ( Es wurden somit viele Linien einfach untereinander gemalt).
Aber es soll sich nur eine Linie bewegen und keine Rückstände hinterlassen.
Hier, was ich bisher geschrieben habe.
Was muss ich verändern, um dies hinzukriegen?
Schon im Voraus vielen Dank für eure Hilfe.
ich versuche gerade ein Applet zu programmieren, in der eine Animation, mit Hilfe der Thread-Klasse, in einem Canvas von oben nach unten "laufen" soll.
Ich hab dazu einfach mal eine "Line" verwendet, die waagerecht liegt, und dessen y-Werte sich per Schleife nach unten bewegen.
Das Problem, dass ich nun habe, ist, dass daraus ein Rechteck wird, da die Linien mit den "älteren" y-Koordinaten nicht wieder verschwindet. ( Es wurden somit viele Linien einfach untereinander gemalt).
Aber es soll sich nur eine Linie bewegen und keine Rückstände hinterlassen.
Hier, was ich bisher geschrieben habe.
Code:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class ani extends Applet implements Runnable
{ Thread myThread;
Canvas zeichenfeld=new Canvas();
Button halt=new Button("Anhalten");
boolean lauf=true;
int weite=5;
public void init(){
setLayout(null);
zeichenfeld.setBackground(Color.black);
zeichenfeld.setBounds(10,10,300,300);
add(zeichenfeld);
halt.setBackground(Color.gray);
halt.setBounds(320,10,100,25);
add(halt);
ereignisbehandlung( );
}
public void start(){
if(myThread==null){myThread=new Thread(this);
myThread.start();}
}
public void run(){
Graphics g;
g= zeichenfeld.getGraphics( );
while(myThread != null){
for(int a=weite;a<=295; a++){
g.setColor(Color.red);
g.drawLine(5,a,200,a);
weite=a;
try{myThread.sleep(20);}catch(InterruptedException e){}
}}
}
public void stop(){
myThread.stop();
myThread = null;
}
public void ereignisbehandlung( ) {
halt.addActionListener( new ActionListener( ) {
public void actionPerformed( ActionEvent e ) {
if(lauf==true){stop(); lauf=false;}
else{start(); lauf=true;}
}
} );
}
}
Was muss ich verändern, um dies hinzukriegen?
Schon im Voraus vielen Dank für eure Hilfe.