V
vercetti
Gast
Hallo,
ich habe in einem Thread in der run-Methode von meinem Spiel eine Pause von 10ms (mit sleep), allerdings wartet das Programm ja dann immer 10ms egal wielang der rest in der run methode braucht. Wenn das dann etwas länger dauert wird der Spielfluss langsamer, was aber nicht sein müsste da er ja immer 10ms wartet.
Meine Frage ist nun: gibt es eine Möglichkeit, dass der code immer jede 10ms ausgeführt wird, egal wielang dieser zum ausführen braucht? (natürlich solange das < 10ms ist).
Habe mal in das allgemeine Forum gepostet, da es sich ja nicht unbedingt auf Spiele beziehen muss.
Hier der Code:
ich habe in einem Thread in der run-Methode von meinem Spiel eine Pause von 10ms (mit sleep), allerdings wartet das Programm ja dann immer 10ms egal wielang der rest in der run methode braucht. Wenn das dann etwas länger dauert wird der Spielfluss langsamer, was aber nicht sein müsste da er ja immer 10ms wartet.
Meine Frage ist nun: gibt es eine Möglichkeit, dass der code immer jede 10ms ausgeführt wird, egal wielang dieser zum ausführen braucht? (natürlich solange das < 10ms ist).
Habe mal in das allgemeine Forum gepostet, da es sich ja nicht unbedingt auf Spiele beziehen muss.
Hier der Code:
Code:
public class MainPanel extends Panel implements Runnable, KeyListener {
public MainPanel() {
init();
setSize(800, 600);
setVisible(true);
System.out.println("test");
Thread th = new Thread(this);
th.start();
}
private Game game;
private Image dbImage;
private Graphics dbg;
private void init()
{
addKeyListener(this);
//...
game = new Game();
}
public void update(Graphics g)
{
if(dbImage == null)
{
dbImage = createImage(this.getSize().width,this.getSize().height);
dbg = dbImage.getGraphics();
}
dbg.setColor(getBackground());
dbg.setColor(new Color(221,234,255));
dbg.fillRect(0,0,this.getSize().width,this.getSize().height);
dbg.setColor(getForeground());
paint(dbg);
g.drawImage(dbImage,0,0,this);
}
public void run()
{
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
while(true)
{
game.loop();
repaint();
try
{
Thread.sleep(10);
}
catch(InterruptedException E){}
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
public void paint(Graphics g)
{
game.paint(g);
}
public void keyPressed(KeyEvent e)
{
//...
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
}