У меня есть небольшой движок, который хорошо работает на моем ноутбуке OSX, но работает с ошибками или сильно задерживается при работе на менее мощном Linux-ПК. Я свести к минимуму код в том месте, где он всего лишь один маленький класс, но такая же лаги. Я думаю, что это имеет какое-то отношение к стратегии буфера и потокам. Вот этот класс:Стратегия Java Buffer вызывает серьезное отставание
public class Test extends Canvas implements Runnable {
private Thread thread;
private boolean running = false;
public Test()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(new Dimension(1000, 1000));
frame.add(this);
frame.setVisible(true);
start();
}
public static void main(String[] args)
{
new Test();
}
public synchronized void start()
{
this.thread = new Thread(this);
this.thread.start();
this.running = true;
}
public synchronized void stop()
{
try
{
this.thread.join();
this.running = false;
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void run()
{
while(running)
{
render();
}
}
private void render()
{
BufferStrategy bs = this.getBufferStrategy();
if(bs == null)
{
this.createBufferStrategy(2);
return;
}
Graphics g = bs.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, 1000, 1000);
g.dispose();
bs.show();
}
}
Для тех, кто читает это, не стоит смешивать легкие весовые и тяжеловесные компоненты AWT. Если вы хотите нарисовать приложение Swing, используйте JPanel. –
Было бы целесообразно использовать AWT над Swing при создании 2D-игры? – Bun
Нет. См. Мой ответ для примера графического приложения с использованием Swing. –