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