作为任务的一部分,我正在重建“塞尔达传说与过去的联系”。
而且我遇到了以下问题,游戏世界是一个 BufferedImage,我 subImage() 是玩家当前位置所需的部分。游戏可以运行,但使用了 80% / 110% 的 CPU。一份资料显示,罪魁祸首是图像的绘制。
所以我想我把背景放在一个单独的 JPanel 中,与 Player、敌人等 JPanel 分开。将它们相互叠加(JLayeredPane)并减少重新绘制背景面板的频率。
但是我该如何做到这一点,我如何告诉 swing 每秒绘制一个面板 x 次和其他 y 次?如果您有更好的优化方法,请告诉我。
这是我目前所拥有的:
public class Main extends JFrame
{
private ZeldaGame game = new ZeldaGame();
private View view = new View(game);
private BackgroundView bckView = new BackgroundView(game);
private Controller ctl = new Controller(game, view, bckView, this);
public Main()
{
setLayout(null);
view.setBounds(0, 0, game.getWidth(), game.getHeight());
bckView.setBounds(0, 0, game.getWidth(), game.getHeight());
JLayeredPane pane = new JLayeredPane();
pane.add(bckView, 1);
pane.add(view, 0);
setLayeredPane(pane);
setSize(game.getWidth(), game.getHeight());
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args)
{
new Main();
}
}
谢谢你。