调用 setup 方法会启动我拥有的计时器,我遇到的问题是渲染,它需要超过 50 毫秒才能完成。对于只有双缓冲区来说太长了。
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();
}
此方法启动定时器任务,其唯一目的是调用渲染和大约 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 多毫秒,这很常见吗?我是否必须重组我的游戏以避免计时器任务并且不使用 BufferStrategy?