Intereting Posts
Кордова Ионная: Включите мобильную клавиатуру Android android Как нажимать на индекс в меню параметров с помощью Espresso Android Возможно autoupdating в Android без использования рынка Android? Android скопирует существующий проект с новым именем в Android Studio Что такое новый сгенерированный код «Это было автоматически создано для реализации API индексирования приложений»? Будет ли веб-браузер android работать с Chrome, начиная с android 4.1? Каков цвет по умолчанию для текста в текстовом виде? Как отличить приложение Android от Amazon Kindle Fire? MapFragment.getMap () возвращает null Создание цифрового виджета с пользовательским шрифтом Android: исключение из памяти в галерее Как создать панель кнопок верхнего или нижнего колонтитула для приложения для Android Как определить мою позицию больше не отображается на карте (после навигации)? Android: smoothScrollToPosition () работает неправильно Twitter4j => AndroidRuntime (446): java.lang.NoClassDefFoundError: twitter4j.http.AccessToken

Нарисуйте изогнутый пользовательский объект в LIBGDX?

Что мне нужно

Я недавно смотрел в LibGDX и, кажется, ударил стену, увиденную на картинке, синяя точка представляет собой палец пользователя, генерация карты – это то, где я, кажется, застрял, ли LibGDX предоставляет метод динамического рисования Изогнутые объекты? Я мог бы просто генерировать их сам как изображения, но тогда изображение сильно растянуто до точки зазора для пальца может поместиться 3! Но также должно быть 1000-ый PX высокий, чтобы разместить весь дизайн уровня.

Разве это так, что я должен собирать сотни многоугольников, чтобы они изогнулись? На стороне не мне понадобится способ определения, когда объект имеет снизу вверх, чтобы я мог создать еще один «кусок» карты.

Solutions Collecting From Web of "Нарисуйте изогнутый пользовательский объект в LIBGDX?"

Как насчет создания набора изогнутых форм, которые можно объединить переменно. Как промежуток в середине будет сверху и снизу каждого изображения в середине (с той же кривизной в конце и в начальных точках) … И между начальными и конечными точками вы можете сходить с ума по форме.

И, наконец, вы можете случайно разместить эти изображения и получить бесконечный мир.

Если вы не хотите останавливаться посередине каждый раз, вы также можете иметь три точки входа и выхода (левый, средний, правый) … и после изображения, которое заканчивается налево, вам, конечно же, нужно добавить изображение Который начинается слева, но может закончиться где-то еще …

Вам не нужны сотни полигонов, чтобы сделать кривую, как вы рисовали. Вы можете уйти с 40 квадрациками слева, а 40 – справа, и это будет выглядеть довольно гладко. Поднимите это до 100 с каждой стороны, и он будет выглядеть почти совершенно гладким, и никакое современное устройство не будет иметь проблем с работой со скоростью 60 кадров в секунду.

Вы можете использовать класс Mesh для создания процедурной сетки для каждой стороны. Вы можете сделать сетку в одном месте, заблокированной камерой, и изменить ее вершины и УФ, чтобы они выглядели так, будто вы панорамируете бесконечно длинный коридор. Это займет довольно много математики впереди, но должно быть плавным, если у вас это будет.

В принципе, ваш проект уровня может быть основан на каком-то уравнении, которое принимает Y offset в качестве входного сигнала. Или это может быть длинный массив смещений, и вы можете использовать сплайн-уравнение или линейное уравнение для интерполяции между ними. Результатом будет координата UV и X, которая может использоваться для обновления каждой из вершин ваших двух сеток.

Вы можете использовать вершинный шейдер для эффективного обновления UV-координат, используя постоянный постоянный смещенный параметр, который вы обновляете каждый кадр. Таким образом, вам не нужно перемещать УФ-данные на графический процессор в каждый кадр.

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


На самом деле, это может выглядеть лучше, если вы оставите только УФ и X-позиции и просто прокрутите позиции Y вверх. Сохраните пару квадратов прокладки сверху и снизу экрана и просто переместите верхний квадрат на дно после прокрутки экрана.