Verstehen BufferStrategy
Ich bin Art von neuen zu java. Ich möchte ein Spiel machen. Nach viel Forschung, ich kann nicht verstehen, wie bufferstrategy funktioniert..
Ich kenne die Grundlagen.. es schafft eine off-screen-image, die Sie später in Ihrem windows-Objekt.. ich habe diese
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..
}
}
Ich weiß nicht.. ich studiert habe dies für eine lange Zeit jetzt.. und nicht mit Glück an alle.. ich weiß nicht.. vielleicht ist es alles gibt, und es ist wirklich einfach und übersichtlich, und ich bin nur zu dumm um es zu sehen..
Danke für die Hilfe.. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, wie es funktioniert:
JFrame
Konstrukte eineBufferStrategy
beim AufrufcreateBufferStrategy(2);
. DieBufferStrategy
weiß, dass es gehört, dass bestimmte InstanzJFrame
. Sie sind das abrufen und speichern es in derbs
Feld.Graphics2D
ausbs
. DieseGraphics2D
Objekt verbunden ist, eine der interne Puffer im Besitz vonbs
. Während Sie zeichnen, geht alles in die Puffer.bs.show()
,bs
wird verursachen, dass die Puffer, die du gerade gezogen hast, werden die aktuellen Puffer für dieJFrame
. Es weiß, wie es zu tun, weil (siehe Punkt 1) er weiß, wasJFrame
im service zu.Das ist alles, was Los ist.
Durch Kommentar zu deinem code...sollten Sie Ihre Zeichnung routine ein wenig. Stattdessen:
sollten Sie eine Schleife wie diese:
Zur Absicherung gegen verloren buffer frames, die nach die docs, kann passieren gelegentlich.
bs.show()
verschoben werden konnten, innerhalb dertry
block. Aber es gibt keinen besonderen Grund, dies zu tun und es ist gute Praxis zur Freigabe von system-Ressourcen, sobald Sie nicht benötigt werden.