2011-12-09 101 views
1

我使用的技巧地回答了這個問題:Java3D: Painting 2D HUD over a Canvas3DJava3d:如何在Java 3D場景上編輯繪製的2D疊加層?

而且我的代碼是這樣的:

... 
    GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); 
    Canvas3D canvas3D = new Canvas3D(config){ 
     public void postRender() 
     { 
      this.getGraphics2D().setColor(Color.white); 
      this.getGraphics2D().drawString("Heads Up Display (HUD) Works!",100,100); 
      this.getGraphics2D().flush(false); 
     } 

    }; 
... 

怎麼可能我後來刪除此2D HUD或編輯該2D HUD?

感謝,

回答

1

如果渲染完全從頭開始渲染每一幀,你可以在同一個類中添加,例如,一個靜態布爾與postRender()方法。然後,該方法使用內部的,如果statment檢查布爾如果爲true,否則不會做任何事情,如果之後通過

ClassName.boolean_name=false; 

的HUD的不應設置布爾爲false。至於改變它,這是可能的,並且真正取決於你想要顯示什麼類型的信息。以下是我用於遊戲的一個示例,但它可以適用於多個主題。

我想存儲FPS,x,y和z位置如果我正在做一個遊戲,那麼我要做的是在類的內部爲每個需要顯示的屬性創建一個變量,然後像這樣:

Graphics2D G2D = this.getGraphics2D() 
G2D.setColor(Color.white); 
G2D.drawString("FPS: "+fps, 100, 100); 
G2D.drawString("X: "+x_pos, 100, 80); 
G2D.drawString("Y: "+y_pos, 100, 60); 
G2D.drawString("Z: "+z_pos, 100, 40); 
G2D.flush(false); 

此外,如果你發現我設置G2D等於this.getGraphics2D(),這樣,我也沒必要每次我想用Graphics2D對象時調用外部方法,每次調用getGraphics2D時間()它必須去那個類,調用這個方法,然後返回值,相比之下,只需要一次,並使用它,更快的類型類型,並且從長遠來看可以創造更快的速度。

畢竟我會做的是我可以將每個變量設置爲正確的值,它會顯示,這是更新它的一種方法,你可以做類似的爲每一行做一個變量,然後去:

line1="this is some text"; 
list2="this is some more text"; 
list3="etc...";