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

Что мне нужно

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

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

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

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

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

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

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

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

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

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


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

Intereting Posts
Как создать массив массивов с данными курсора в Android UriMatcher не будет соответствовать uri Что такое новый сгенерированный код «Это было автоматически создано для реализации API индексирования приложений»? Записать весь экран, включая предварительный просмотр камеры CollapsingToolbarLayout не отображает заголовок Кэширование файлов Guava Во время звонка можно получить длительность исходящего звонка? Android отображает только mp3 с ACTION_GET_CONTENT Android Динамически изменяющийся размер круга корректирует только половину круга Как реализовать держатель вида? Взаимодействие Scrollviews и Recylcerviews в Android Как я могу определить, что CollapsingToolbar рухнул? Как получить тип контента из ShoutCast 7.html Изображения в папке «drawable» автоматически изменяются? Получение координат GPS быстрее программно без Интернета, но с использованием сетевого провайдера и мобильного GPS