Подтвердить что ты не робот

Когда использовать ShapeRenderer, Mesh + SpriteBatch, Box2D и Scene2D в Libgdx?

Я новичок в разработке игр для Android, и после того, как я начал с libgdx ShapeRenderer и сделал еще немного поиска, я смутился, если начал с правой ноги.

Итак, что я действительно хотел бы знать, когда следует использовать ShapeRenderer, Mesh + SpriteBatch, Box2D и Scene2D.

4b9b3361

Ответ 1

LibGDX имеет довольно много (в основном ортогональных) API для рендеринга. Я все еще участвую во многих из них, но я могу дать обзор разных частей.

ShapeRenderer позволяет быстро и легко размещать на экране основные многоугольники и линии. Он не особенно эффективен (он загружает много вершинных данных для каждого рендеринга). Но это может быть очень быстро. Он ориентирован строго на экран (по умолчанию он имеет орфографический проект на весь экран, а его единицы, как правило, пиксели).

Класс Mesh дает вам более прямой контроль над геометрией, но вы подвергаетесь гораздо большему количеству деталей (например, кодированию цвета как плавающие и хранящие данные вершин, данные о цвете и данные текстуры все в одном массиве с плавающей точкой и понятие индексных массивов).

SpriteBatch ориентируется вокруг "спрайтов" (как правило, прямоугольных областей с текстурой в них). Это скрывает некоторую сложность (и гибкость) текстурирования с помощью сеток.

Box2D предназначен для физического моделирования и не похож ни на одну из других частей API, о которых вы упомянули (в основном это касается рендеринга).

Наконец, Scene2D в основном касается создания анимированных элементов пользовательского интерфейса, таких как кнопки, списки и слайдеры. Но его достаточно мощная (и имеет достаточно аккуратную и гибкую поддержку анимаций и событий взаимодействия), что вы можете реализовать в ней довольно много "игры".

Вы также можете использовать необработанные команды OpenGL (см. GL20).

Вы можете полностью смешивать и сопоставлять эти разные примитивы (одна из предостережений заключается в том, что вы обычно должны "смывать" и "завершать" все ShapeRenderer/SpriteBatch/Mesh рендеринг, прежде чем начинать другой вкус). Так, например, вы можете использовать Scene2D для своего "главного меню" и некоторых мета-действий в вашей игре, SpriteBatch, чтобы отобразить ядро ​​вашей игры, и использовать ShapeRenderer для создания отладочных наложений (подумайте о визуализации ограничивающих прямоугольников, и т.д.).

Также обратите внимание, что большая часть libGDX ориентирована на 2D. Raw OpenGL и API Mesh также могут использоваться для создания 3D-объектов.

Проверьте пример gdx-invaders, чтобы узнать, как он использует Mesh, OpenGL и SpriteBatch. (Я думаю, что этот пример предваряет Scene2d, поэтому нет ничего...). Также стоит взглянуть на реализацию этих классов, чтобы увидеть, что они делают под обложками.