1

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

谢谢,

4

1 回答 1

1

如果渲染器完全从头开始渲染每一帧,例如,您可以使用 postRender() 方法在同一类中添加静态布尔值。然后在方法内部使用 if 语句来检查布尔值是否为真,否则不做任何事情,如果你将布尔值设置为假

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...";
于 2011-12-09T20:24:23.113 回答