7
我對java很陌生。我想製作一款遊戲。大量的研究後,我無法理解BufferStrategy中如何運作.. 我知道的基本知識..它創建以後可以把你的窗戶離屏圖像對象。我得到這個瞭解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..
}
}
我不知道..我一直在研究這個很長一段時間..並沒有運氣..我不知道..也許它在那裏,它非常清晰和簡單,我「M太傻,看看吧..
感謝所有幫助.. :)
爲什麼我們需要在show()之前處理()緩衝區?我假定圖形對象只有圖形功能,但是當不需要時,我們「釋放它的工具和資源」,並顯示我們的緩衝圖像? –
@someFolk - 它不需要按順序完成;對'bs.show()'的調用可以在'try'塊內移動。但是沒有特別的理由要這樣做,並且一旦不需要它們就釋放系統資源是一種很好的做法。 –