Этап libGDX не отвечает, новая полная белизна, видовые экраны не работают

#java #opengl #libgdx #actor #scene2d

#java #opengl #libgdx #актер #сцена 2d

Вопрос:

Я создавал проект в libGDX и начал с версии 0.9.9, я только что получил mac, чтобы получить его на ios, и после ряда выяснений новых обновлений libGDX и robovm и взвешивания параметров (путем множества проб и ошибок) у меня будетобновить все до новой структуры libgdx 1.2.0 (gradle и т. Д.). Это произошло с добавлением видовых экранов и испортило работу этапов. Изначально в моем конструкторе я бы начал с создания ортографической камеры и сцены, т. Е.:

 camera = new OrthographicCamera(854, 480); 
stage = new Stage();
  

Я не могу понять, как включить камеру в новый код, потому что я знаю, что где-то мне нужно создать видовой экран для сцены, но я не уверен, как моя камера должна с ним работать. Все, что отображается, — это просто белый экран. Теперь, после неоднократной работы с тем, как у меня есть произвольно созданный видовой экран, настройка камеры и сцены, я действительно получил его для отображения кнопок главного меню, но поверх пустого белого, когда должно быть 3 движущихся фона (это создает классный эффект паралакса …) и перемещение заголовка вместе с ним. Может ли быть так, что libGDX теперь использует OpenGL 2.0 вместо 1.0? Эти участники кнопок также полностью не отвечают, они должны анимироваться при нажатии, изменять экран и выводить на консоль, но ничего не делают. У меня всегда был этап в качестве входного процессора, установленного в методе show, и я также добавлял всех своих актеров, т. Е.:

 @Override
public void show() {
    Gdx.input.setInputProcessor(stage);
    stage.addActor(variousActors);

}
  

Может ли белизна заключаться в том, что opengl не может обрабатывать изображения и вместо этого показывает белый цвет? Может ли это быть из-за нехватки оперативной памяти (раньше никогда не было проблем, будь то 20 МБ доступной оперативной памяти или 8 ГБ), может быть, используемые изображения слишком большие (наибольшее значение 3840 x 1080)? В моем рендеринге:

 public void render(float delta) {
    Gdx.gl.glClearColor(1F, 1F, 1F, 1F);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.setProjectionMatrix(camera.combined);
    camera.update();

    stage.act(delta);
    batch.begin();

    batch.end();    
    stage.draw();
    System.out.println("menuscreen rendering");

}
  

—Все действующие лица / элементы инициализируются в конструкторе

Вся моя игра на самом деле построена из элементов сцены 2d — это действительно сработало очень хорошо 🙂 — так что заставить это работать означает всю игру. Я много искал и не нашел никаких решений. Итак, в обзоре, как мне правильно использовать видовой экран со сценами и как мне настроить с его помощью камеру; Почему мои сцены / актеры (кнопки) не отвечают; Почему все отображается как полная белизна, кроме моих кнопок?

Комментарии:

1. Вы это сделали stage.getViewport().update(width, height, true) resize ?

Ответ №1:

Попробуйте создать этап таким образом:

 camera = new OrthographicCamera(854, 480);
viewport = new ScalingViewport(Scaling.stretch, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), camera);
viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true);
stage = new Stage(viewport, batch);
  

Вам не нужно использовать ScalingViewport. Проверьте https://github.com/libgdx/libgdx/wiki/Viewports для других возможностей.

В resize(int, int) , как уже упоминалось, попробуйте:

 viewport.update(width, height, true);
  

Комментарии:

1. Спасибо, я проверю это. Я собираюсь использовать stretchviewport, потому что в противном случае это серьезно влияет на игровой процесс, потому что у меня все мои актеры установлены на основе координат, и ни одно из устройств, поддерживающих его, не испортит соотношение сторон, если оно будет растянуто. Есть идеи, что может быть причиной бездействия / белизны? Большое вам спасибо!

2. Вы уже пробовали мое предложение? Исправило ли это какие-либо из упомянутых вами проблем?

3. Я просто настроил его так, как вы показали, и активность вернулась к кнопкам, теперь они меняют экраны и анимируются, однако для всего остального все еще остается полной белизной. Есть мысли о том, почему?? Спасибо!

4. Что вы имеете в виду под полной белизной? Это просто ваш фон, который не отображается? Если да, то как вы создаете свой фон?

5. Я понял это! В методе рисования актеров, который я создал, я не знал, что из-за нового API он должен быть переопределен, и вы должны заменить SpriteBatch на Batch, т. Е.: Должно стать: ‘@Override public void draw(Batch batch, float parentAlpha) {‘