2011-12-09 64 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...";