#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) {‘