Java 对于双缓冲区,BufferStrategy show()方法需要50毫秒以上的时间才能完成,为什么速度这么慢?
调用setup方法启动我拥有的计时器,我遇到的问题是render,它需要50毫秒才能完成。对于双缓冲区来说太长了Java 对于双缓冲区,BufferStrategy show()方法需要50毫秒以上的时间才能完成,为什么速度这么慢?,java,time,timer,bufferstrategy,Java,Time,Timer,Bufferstrategy,调用setup方法启动我拥有的计时器,我遇到的问题是render,它需要50毫秒才能完成。对于双缓冲区来说太长了 public void setup() { hB = new Rectangle(screenSize.width, screenSize.width); player.setRect(new Rectangle(player.getX(), player.getY(), 10, 10)); this.createBufferStrategy(2);
public void setup() {
hB = new Rectangle(screenSize.width, screenSize.width);
player.setRect(new Rectangle(player.getX(), player.getY(), 10, 10));
this.createBufferStrategy(2);
strategy = this.getBufferStrategy();
start();
startShooting();
startRender();
}
此方法启动计时器任务,其唯一目的是调用render和大约60 fps
public void startRender() {
startRen = new TimerTask() {
public void run() {
render();
}
};
timer.schedule(startRen, 0, 16);
}
这是个麻烦的方法
public void render() {
g = (Graphics2D) strategy.getDrawGraphics();
g.setPaint(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
g.setPaint(Color.black);
g.drawString("Using " + player.getWeapon().getName(), 10, 20);
g.drawString("Magazine " + mag, 10, 50);
g.drawString("Number of AI " + AI.ai.size(), 10, 80);
g.drawString("Bullets " + Bullet.bullets.size(), 10, 110);
if (reloading) {
g.setFont(new Font("Calibri", Font.BOLD, 100));
g.setColor(Color.RED);
g.drawString("RELOADING", screenSize.width / 2 - 250, screenSize.height / 2);
g.setColor(Color.BLACK);
}
for (Bullet b : Bullet.bullets) {
g.fillOval((int) b.getX(), (int) b.getY(), 4, 4);
}
for (AI a : AI.ai) {
g.fill(a.getRect());
}
g.fill(player.getRect());
g.dispose();
strategy.show();
Toolkit.getDefaultToolkit().sync();
}
唯一需要时间的是
strategy.show()
创建两个缓冲区需要50多毫秒,这是常见的吗?我必须重新设计我的游戏以避免计时器任务,而不是使用缓冲策略吗