7
私はJavaの新種です。私はゲームを作りたい。多くの研究の後、私はするBufferStrategyがどのように動作するかを理解することはできません... 私は基本を知っている...それはあなたが後であなたの窓に入れることができます..私はこのバッファストラテジーを理解してください
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..
}
}
を得たオブジェクトのオフスクリーンイメージを作成し、
私は分かりません。私はこれを長い間勉強してきました。そして運が全くありません。私は知らない。多分それはすべてそこにあり、それは本当に明確で単純です。 「すべての助けを
おかげで...それを見てあまりにも愚かメートル.. :)
バッファをshow()する前に、なぜdispose()する必要がありますか?私は、グラフィックオブジェクトはグラフィックス機能しか持たないと仮定していますが、必要がないときは「ツールとリソースを解放してください」とバッファリングされたイメージを表示します。 –
@someFolk - この順番で実行する必要はありません。 'bs.show()'への呼び出しを 'try'ブロックの中で移動することができます。しかし、特別な理由はありません。システムリソースが不要になるとすぐにシステムリソースを解放することをお勧めします。 –