Comprendre BufferStrategy
Je suis un peu nouveau pour java. Je veux faire un jeu. Après beaucoup de recherches, je ne comprends pas comment bufferstrategy fonctionne..
Je connais les bases.. il crée une image de l'écran que vous pourrez mettre dans votre windows objet.. j'ai eu ce
public class Marco extends JFrame {
private static final long serialVersionUID = 1L;
BufferStrategy bs; //create an strategy for multi-buffering.
public Marco() {
basicFunctions(); //just the clasics setSize,setVisible,etc
createBufferStrategy(2);//jframe extends windows so i can call this method
bs = this.getBufferStrategy();//returns the buffer strategy used by this component
}
@Override
public void paint(Graphics g){
g.drawString("My game",20,40);//some string that I don't know why it does not show
//guess is 'couse g2 overwrittes all the frame..
Graphics2D g2=null;//create a child object of Graphics
try{
g2 = (Graphics2D) bs.getDrawGraphics();//this new object g2,will get the
//buffer of this jframe?
drawWhatEver(g2);//whatever I draw in this method will show in jframe,
//but why??
}finally{
g2.dispose();//clean memory,but how? it cleans the buffer after
//being copied to the jframe?? when did I copy to the jframe??
}
bs.show();//I never put anything on bs, so, why do I need to show its content??
//I think it's a reference to g2, but when did I do this reference??
}
private void drawWhatEver(Graphics2D g2){
g2.fillRect(20, 50, 20, 20);//now.. this I can show..
}
}
Je ne sais pas.. j'ai étudié ce pour un long moment maintenant.. et avec pas de chance à tous.. je ne sais pas.. c'est peut-être là, et c'est vraiment simple et claire, et je suis juste trop stupide pour voir..
Merci à tous pour l'aide.. 🙂
OriginalL'auteur Charlie Villy | 2012-11-27
Vous devez vous connecter pour publier un commentaire.
Voici comment cela fonctionne:
JFrame
construit unBufferStrategy
lorsque vous appelezcreateBufferStrategy(2);
. LeBufferStrategy
sait qu'il appartient à cette instance spécifique deJFrame
. Vous êtes de la récupérer et de les stocker dans labs
champ.Graphics2D
debs
. CetteGraphics2D
objet est lié à l'un des tampons internes détenue parbs
. Lorsque vous dessinez, tout se passe dans la mémoire tampon.bs.show()
,bs
sera la cause de la mémoire tampon que vous venez de piocher à devenir le tampon courant pour laJFrame
. Il sait comment faire cela parce que (voir point 1), il sait ce qu'JFrame
il est en service.C'est tout ce qui se passe.
En guise de commentaire à votre code...vous devriez changer votre dessin routine un peu. Au lieu de cela:
vous devriez avoir une boucle comme ceci:
Qui permettra de se protéger contre la perte de mémoire tampon de trames, qui, selon les docs, peut arriver de temps en temps.
Il n'a pas d' à faire dans cet ordre; l'appel à
bs.show()
pourrait être déplacé à l'intérieur de latry
bloc. Mais il n'y a pas de raison particulière de le faire et c'est une bonne pratique pour libérer les ressources du système dès qu'ils ne sont pas nécessaires.OriginalL'auteur Ted Hopp