課題の一環として、「ゼルダの伝説過去へのリンク」の再現に取り組んでいます。
そして、次の問題があります。ゲームの世界はBufferedImageであり、プレーヤーの現在の場所に必要な部分をsubImage()します。ゲームは動作しますが、CPUの80/110パーセントを使用します。プロファイルは、犯人が画像の描画であることを明らかにしました。
だから私は、プレイヤー、敵などのJPanelとは別のJPanelに背景を置くことにしました。それらを互いに重ねてレンダリングし(JLayeredPane)、背景パネルを再描画する頻度を大幅に減らします。
しかし、これを行うにはどうすればよいですか?1つのパネルを1秒間にx回、他のパネルをy回描画するようにswingに指示するにはどうすればよいですか?最適化のより良い方法があれば、私に知らせてください。
これが私が現時点で持っているものです:
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();
}
}
ありがとうございました。