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

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

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

1 ответов


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

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

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

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

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

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

вы также можете использовать команды raw " OpenGL "(см. GL20), тоже.

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

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

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