Как бы я реализовал бесконечную дорогу, по которой бежит игрок?


17

Я хочу создать иллюзию, что человек бежит по длинному пути, то есть эта картинка

http://camlinecambridgelimited.web.officelive.com/images/road%20graphic1.jpg

Если вы играли в Temple Run на iPhone, это тот же принцип, но вместо храма это обычная дорога.

Я хочу знать, как это реализовано. Например, я просто повторяю эту дорожную картинку в цикле?

Ответы:


16

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

  1. Для повторения вместо установки вашей вертикальной координаты текстуры от [0 до 1], установите ее от [0 до N], где N - количество повторений текстуры. Отрегулируйте это значение в зависимости от того, какой у вас рост по сравнению с вашей высотой текстуры.
  2. Для прокрутки я бы просто прокрутил вертикальную координату текстуры, чтобы вместо диапазона от [0 до N] он варьировался от [inc до N + inc], при этом значение inc увеличивалось или уменьшалось в каждом кадре. Время от времени я бы оборачивал inc обратно в начало координат, чтобы предотвратить переполнение / переполнение.

РЕДАКТИРОВАТЬ Я только что попытался реализовать это точно так, как я описал (но в XNA), и это работало довольно хорошо. Смотрите это видео демо. Исходный код здесь для интересующихся.


Например, при N, равном 3, вы получите что-то похожее на изображение ниже (я нарисовал среднюю часть красным, чтобы вы могли видеть, где происходит повторение). Затем простое изменение значения inc приведет к прокрутке дороги в одном или другом направлении, в зависимости от того, увеличивали ли вы его или уменьшали.

введите описание изображения здесь


Та же самая техника может использоваться, чтобы подделать мультипликацию потоков танка. Конечно, его нельзя будет использовать, если вы смоделируете каждый сегмент сети ...
Exilyth

1

Если вы хотите сделать бесконечную дорогу «по-настоящему», вы создаете три поверхности и заставляете их зацикливаться, когда каждая поверхность выходит за пределы поля зрения. Поместите поверхности от начала до конца в мировом пространстве и переместите их все к камере. Когда ближайший конец отойдет от камеры, верните его положение в край самой дальней поверхности.

Если вы хотите реализовать его как спрайт с иллюзией движения, вам нужно создать ряд различных текстур, которые должны выглядеть примерно так:

По мере того как вид перемещается вперед, перебирайте текстуры по порядку.


0

Повторение изображения - хорошая идея. Выясните, сколько повторений должно быть видно на экране, и нарисуйте изображение столько раз. Когда дорога прокручивается, будет точка, в которой одно изображение полностью скрыто за камерой и, следовательно, невидимо. В этот момент вы хотите переместить это изображение из-за ваших ног в дальний конец вашей конечной полосы изображений.

Пока мы в этом, вы получите лучший эффект от этого, подражая неустойчивой перспективе бегущего человека. Запишите фильм о своем беге с точки зрения ваших глаз и изучите его.


2
Это на самом деле не работает, так как его изображение является перспективным. Ему понадобятся разные изображения, чтобы играть как анимацию.
Бобби
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.