Я работаю над игрой, и у меня возникла довольно интересная проблема: умные способы рисования звездных полей.
Это 2D игра, поэтому действие можно прокручивать по X и Yнаправления.Кроме того, мы можем настроить масштаб, чтобы показать больше или меньше игровой площадки.Я также хотел бы, чтобы на звездном поле был искусственный параллакс, чтобы создать впечатление глубины.
Прямо сейчас я делаю это традиционным способом, имея большой массив звезд, каждая из которых помеченафактор глубины.Чтобы нарисовать, я перевожу каждую звезду в соответствии с положением камеры, умноженным на «глубину», поэтому некоторые звезды много двигаются, а другие немного.Это все работает нормально, но, конечно, поскольку в моем массиве конечное число звезд, у меня возникают проблемы, когда камера перемещается слишком далеко или мы слишком сильно уменьшаем масштаб.Это все будет работать, но связано с большим количеством кода и особых случаев.
Это оскорбляет мое чувство элегантности.Должен быть лучший способ добиться этого.
Я рассмотрел процедурное генерирование моих звезд, что позволяет мне иметь неограниченное количество: например, используя фиксированное начальное число и PRNG для определения координат.Мне нужно было бы разделить небо на плитки, создать зерно, хэшируя координаты плиток, а затем нарисовать, скажем, 100 звезд на плитку.Это позволяет мне бесконечно расширять свое звездное поле во всех направлениях, при этом все еще нужно учитывать только видимые плитки - но это не работает с фактором «глубины», так как это позволяет звездам отклоняться от своей плитки.Я мог бы просто использовать несколько слоистых непараллаксных звездных полей, используя этот алгоритм, но это выглядит как мошенничество.
И, конечно, мне нужно делать все это каждый кадр, поэтому он должен быть быстрым.
Что вы все считаете?