我用这个技巧回答了这个问题:Java3D: Painting 2D HUD over a Canvas3D
我的代码是这样的:
...
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?
谢谢,
答案 0 :(得分:1)
如果渲染从头开始渲染每个帧,您可以使用postRender()方法在同一个类中添加一个静态布尔值。然后在方法内部使用if语句检查布尔值是否为true,否则不执行任何操作,如果然后通过
将布尔值设置为falseClassName.boolean_name=false;
HUD不应该显示。至于更改它,这是可能的,并且实际上取决于您想要显示的信息类型。这是我用于游戏的一个例子,但它可以适合几个主题。
我想存储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...";