T
Titan
Gast
Hallo, ich möchte gern eine Animation erstellen, die ausserhalb der Main läuft. Habe gestern schon den Tipp bekommen, dass ich es über einen Thread starten muss. Dies habe ich gemacht und es funktioniert auch soweit.
Nur wenn ich die Tasten gedrückt halte, dann ignoriert er die Thread.sleep() Methode und auch die fe.imfenster() und fe.isclash() [bewirkt das überprüfen das man nicht durch "mauern" gehen kann...im fenster ist wohl selbsterklärend].
Nehme ich aber die "Thread.sleep()" raus, nimmt er auch wieder imfenster und clash...warum das???
Nur wenn ich die Tasten gedrückt halte, dann ignoriert er die Thread.sleep() Methode und auch die fe.imfenster() und fe.isclash() [bewirkt das überprüfen das man nicht durch "mauern" gehen kann...im fenster ist wohl selbsterklärend].
Nehme ich aber die "Thread.sleep()" raus, nimmt er auch wieder imfenster und clash...warum das???
Code:
public void keyPressed(KeyEvent ke){
int was = ke.getKeyCode();
switch (was) {
case KeyEvent.VK_SPACE:break;
case KeyEvent.VK_RIGHT:laufen(0);break;
case KeyEvent.VK_DOWN:laufen(1);break;
case KeyEvent.VK_LEFT:laufen(2);break;
case KeyEvent.VK_UP:laufen(3);break;
case KeyEvent.VK_1:break;
case KeyEvent.VK_2:break;
case KeyEvent.VK_3:break;
case KeyEvent.VK_S:break;
default:break;
}
}
private void laufen(int richtung){
Animation ani=new Animation(fe,richtung);
if(fe.imfenster(richtung)){
if(fe.isclash(richtung)){
ani.start();
}
}
}
class Animation extends Thread {
int richtung;
Fensterelement fe;
public Animation(Fensterelement fe,int richtung){
this.richtung=richtung;
this.fe=fe;
}
public void run() {
for (int i = 0; i < fe.dbax / 8; ++i) {
switch (richtung) {
case 0:fe.player.setXposi(fe.player.getXposi() + fe.dbax / 4);break;
case 1:fe.player.setYposi(fe.player.getYposi() + fe.dbay / 4);break;
case 2:fe.player.setXposi(fe.player.getXposi() - fe.dbax / 4);break;
case 3:fe.player.setYposi(fe.player.getYposi() - fe.dbay / 4);break;
default:break;
}
repaint();
try {
Thread.sleep(75);
} catch (InterruptedException e) {
}
}
}
}
}