Je travaille sur la recréation de "Legend of Zelda un lien vers le passé" dans le cadre d'une mission.Java optimisant la peinture d'une image de fond pour un jeu
Et j'ai le problème suivant, le monde du jeu est un BufferedImage dont je sous-image() la partie dont j'ai besoin pour l'emplacement actuel du joueur. Le jeu fonctionne mais utilise 80/110% du CPU. Un profil a révélé que le coupable est le dessin de l'image.
Donc je me suis dit que je mettais l'arrière-plan dans un JPanel séparé du Player, des ennemis etc JPanel. Rendez-les les uns au-dessus des autres (JLayeredPane) et repeignez le panneau d'arrière-plan beaucoup moins souvent.
Mais comment est-ce que je fais cela, comment puis-je dire à Swing de dessiner un panneau x fois par seconde et l'autre fois par y? Si vous avez une meilleure façon d'optimiser faites le moi savoir.
Voici ce que j'ai au moment:
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();
}
}
Merci.
Merci J'ai trouvé un article grâce à votre suggestion sur bi.getGraphics voir ma réponse. Et GTGE sonne bien, mais je le fais moi-même pour l'expérience. C'est une mission de toute façon. PS JCanvas ne fait pas partie de Java, vouliez-vous dire Canvas ou le projet JCanvas? – MrHus
GTGE est maintenant open source, jetez un oeil à l'intérieur (http://code.google.com/p/gtge) - c'est là que j'ai appris beaucoup de techniques efficaces pour faire des jeux Java2D, plus son * très * proche de vous feriez de toute façon si vous le faites à partir de rien :) Et désolé, je voulais dire Canvas plutôt que JCanvas (oups). –