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