игрушко, part2
Aug. 9th, 2016 05:39 pmпервая часть http://ewoke.livejournal.com/409160.html
итак, у нас есть большой массив, описывающий игровой мир. массив состоит из координат X и Y объектов, и типа этих объектов.
давайте заселим его уже кем-нибудь!
кем - рано еще. а вот чем - самое время.
разбросаем по карте скопления металла (СМ).
(для упрощения - на главном массиве тип объектов описывается не битовой комбинацией, а байтом; т.е имеем массив их 2х байт на X, 2х байт на Y, и 1 байт на тип объекта)
цикл инициализации 1 - раскидываем скопления.
возьмем часть от возможных 16к объектов, для описания СМ, пусть будет 1к пятен, для начала.
(чтобы было чем "питаться" производству в начале игры)
x= random (60000)
y= random (60000)
o= metal_spot
повторить 1024 раза
теперь цикл 2 - инициализируем состояние пятен
берем еще массив в 1024 однобайтовых значений, и задаем им случайные 1..255 значения
готово!
теперь, при рендеринге картинки, мы смотрим, попадают ли координаты объекта на карте в наш viewport ("окно", через которое мы смотрим на игровой мир), является ли объект СМ, и если это так, рендерим СМ, просто "напыляя" в цикле 1..15 (собственно, плотность СМ, уменьшенная в 16 раз, чтобы лишний раз не занимать CPU рисованием) кружочки случайного размера случайным образом вокруг точки с координатами СМ в игровом мире, в пересчете на viewport.
т.е. для значений X и Y от 0 до 600, все элементарно.
если координаты превышают 600, мы делим на 600, а остаток считаем за экранные координаты.
вот как то так.
демонстрирующий это код + движение вьюпорта по карте мира, при выходе указателя мыши за пределы вьюпорта (что очень необходимо сделать) - обещаю в скором времени.
Быть пораженным достойным врагом - честь, милорд. Бесчестие - быть пораженным машинами врага, созданными из останков наших машин.
Летопись Противостояния, стр. 345
Летопись Противостояния, стр. 345
итак, у нас есть большой массив, описывающий игровой мир. массив состоит из координат X и Y объектов, и типа этих объектов.
давайте заселим его уже кем-нибудь!
кем - рано еще. а вот чем - самое время.
разбросаем по карте скопления металла (СМ).
(для упрощения - на главном массиве тип объектов описывается не битовой комбинацией, а байтом; т.е имеем массив их 2х байт на X, 2х байт на Y, и 1 байт на тип объекта)
цикл инициализации 1 - раскидываем скопления.
возьмем часть от возможных 16к объектов, для описания СМ, пусть будет 1к пятен, для начала.
(чтобы было чем "питаться" производству в начале игры)
x= random (60000)
y= random (60000)
o= metal_spot
повторить 1024 раза
теперь цикл 2 - инициализируем состояние пятен
берем еще массив в 1024 однобайтовых значений, и задаем им случайные 1..255 значения
готово!
теперь, при рендеринге картинки, мы смотрим, попадают ли координаты объекта на карте в наш viewport ("окно", через которое мы смотрим на игровой мир), является ли объект СМ, и если это так, рендерим СМ, просто "напыляя" в цикле 1..15 (собственно, плотность СМ, уменьшенная в 16 раз, чтобы лишний раз не занимать CPU рисованием) кружочки случайного размера случайным образом вокруг точки с координатами СМ в игровом мире, в пересчете на viewport.
т.е. для значений X и Y от 0 до 600, все элементарно.
вот как то так.
демонстрирующий это код + движение вьюпорта по карте мира, при выходе указателя мыши за пределы вьюпорта (что очень необходимо сделать) - обещаю в скором времени.
no subject
Date: 2016-08-13 06:14 pm (UTC)Попутно выяснилось, что 60к пикселей - это очень и очень много, шансы "встретить разумную жизнь", иными словами одно из 1к пятен, нереально.
Даже при 10к на X и на Y, пятна редки.