Java3d: Как редактировать нарисованный 2d оверлей на сцене Java 3D? - PullRequest
1 голос
/ 09 декабря 2011

Я использовал технику, ответил на этот вопрос: Java3D: рисование 2D HUD поверх 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 Ответ

1 голос
/ 10 декабря 2011

Если при рендеринге каждый кадр отображается полностью с нуля, вы можете добавить, например, статическое логическое значение в одном классе с помощью метода 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 (), он должен идти в этот класс, вызывать этот метод и возвращать значение по сравнению с простым получением его один раз, ииспользуя его, более быстрый тип, и в конечном итоге создает более быстрые скорости.

Что бы я сделал после всего этого, я мог бы просто установить для каждой переменной правильное значение, и это отобразило бы, это один из способовобновив его, вы можете сделать аналогичные переменные make для каждой строки и перейти:

line1="this is some text";
list2="this is some more text";
list3="etc...";
...