Java3d:如何在Java 3d场景上编辑绘制的2D叠加层?

时间:2011-12-09 19:58:12

标签: java java-3d hud

我用这个技巧回答了这个问题: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?

谢谢,

1 个答案:

答案 0 :(得分:1)

如果渲染从头开始渲染每个帧,您可以使用postRender()方法在同一个类中添加一个静态布尔值。然后在方法内部使用if语句检查布尔值是否为true,否则不执行任何操作,如果然后通过

将布尔值设置为false
ClassName.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...";