我使用的技术回答了这个问题: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?
最佳答案
如果渲染完全从头开始渲染每个帧,您可以在与 postRender() 方法相同的类中添加静态 boolean 值。然后在方法内部使用 if 语句检查 boolean 值是否为 true,否则不执行任何操作,如果您通过
将 boolean 值设置为 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...";
关于Java3d : How to edit a drawn 2d overlay on a Java 3d scene?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8451017/