我用技术回答了这个问题: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?
1条答案
按热度按时间gojuced71#
如果渲染器完全从头开始渲染每一帧,你可以在postRender()方法的同一个类中添加一个静态布尔值。然后在方法内部使用if语句检查布尔值是否为true,否则不做任何事情,如果你通过
HUD不应该显示。至于改变它,这是可能的,这真的取决于你想显示什么类型的信息。这里有一个例子,我会用游戏,但它可以适合几个主题。
我想存储FPS,x,y和z位置如果我正在开发一个游戏,那么我要做的就是在类中为我需要显示的每个属性创建一个变量,然后像这样:
另外,如果你注意到我将G2D设置为this.getGraphics2D(),这样我就不需要在每次想要使用Graphics2D对象时调用外部方法,每次你调用getGraphics2D()时,它都必须去那个类,调用那个方法,并返回值,与只获取一次并使用它相比,更快的类型类型,从长远来看,会产生更快的速度。
在所有这些之后,我会做的是,我可以将每个变量设置为正确的值,它会显示,这是更新它的一种方法,你可以做类似的,为每行创建一个变量,然后: