Главная Юзердоски Каталог Трекер NSFW Настройки

Gamedev

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 55 7 30
Привет всем Объясните пожалуйста, как делают Аноним 17/01/21 Вск 15:53:03 721754 1
загружено.jpg 22Кб, 300x168
300x168
agooddayofworkb[...].jpg 25Кб, 354x250
354x250
et4x8ifhsnn41.jpg 6110Кб, 4000x2534
4000x2534
Привет всем

Объясните пожалуйста, как делают игры, на подобии ферм, как Stardew valley. Не конкретные особенности этой игры, а именно расположение объектов на области и их дальнейшее сохранение на локации. Как это делается ? Объектов может быть примерно 1394, и возможность ставить их почти на любой локации. Ну не будем же мы пихать все эти объекты в каждую локацию, верно ? Что нужно знать, чтобы вызывать любой объект в любую локацию и сохранять его местоположение ?

Сейчас тычусь носом в массивы, но после того, как узнал вкратце возможности, додумать не получается. Может все возможные объекты в игре занимают своё место в ячейках массива по координатам X ?
Аноним # OP 17/01/21 Вск 15:54:24 721755 2
Проверка
Аноним 17/01/21 Вск 16:26:29 721764 3
>>721754 (OP)
Твои вопросы выдают слабое знание матчасти. Учись программированию, начинай с простых вещей.
Аноним 17/01/21 Вск 16:41:31 721771 4
>>721754 (OP)
>Ну не будем же мы пихать все эти объекты в каждую локацию, верно ? Что нужно знать, чтобы вызывать любой объект в любую локацию и сохранять его местоположение ?
Что ещё за «пихать» и «вызывать»? Если ты изучил массивы, тебе уже должен быть понятен общий принцип. Игровая карта в типичной ферме представляет собой большой двумерный массив, то есть массив массивов. К такому массиву можно легко обращаться способом myArray[x][y], где x и y — координаты нужной ячейки. Если тебе в какую-то ячейку надо поместить объект, просто пишешь что-то вроде myArray[x][y] = “тыква”, а функция отрисовки потом обходит этот массив циклом и рисует тыкву, где надо.
Естественно, что я привёл упрощённый пример. В реальности содержимое каждой клетки описывается как минимум ещё одним массивом (а зачастую и словарём), т.к. в ней надо хранить не только тыкву, но и тип земли, например. А возможно, для ландшафта существует просто отдельный двумерный массив. Это целиком зависит от разработчика.
Аноним 17/01/21 Вск 17:13:12 721780 5
>>721754 (OP)
> Что нужно знать, чтобы вызывать любой объект в любую локацию и сохранять его местоположение ?
Чтобы говно из одной локации переместить в другую, его сначала нужно найти. Например лока может хранить список всех вещей которые в ней находятся, когда найдешь свое говно в этом списке, просто удаляешь его от туда и кладешь в список другой локи и задаешь говну новую позицию как в посте выше.
Аноним # OP 17/01/21 Вск 17:29:19 721789 6
Тест
Аноним # OP 17/01/21 Вск 17:31:02 721790 7
>>721764
>>721771
>>721780
Спасибо, чуть уяснил. Я понимаю, что у вас дико горит, когда кто то не разбираясь лезет туда, где не осилит. Конечно я не шарю в математике. Но все объяснения, которые лежат на поверхности не дали мне никакого толчка. Вот есть массивы и они умеют так, а ещё вот так, но мне лично это никак не помогло.

Короче спасибо
Аноним 17/01/21 Вск 19:33:01 721817 8
>>721764
>>721771
>>721780
Понял, программирование не для всех. Когда начинаешь изучать основы, ничего, а дальше все как один говорят, ну зная это, ты можешь это. Да нихера ты не можешь
Аноним 17/01/21 Вск 19:43:23 721823 9
>>721817
Ты чего хотел-то? Вчера за книжки сел, сегодня погромист? Начинай со спейс-скроллера, а не со сложных вещей.
Аноним 17/01/21 Вск 21:31:56 721859 10
>>721771
Словил аневризму с этого поста.
>Игровая карта в типичной ферме представляет собой большой двумерный массив, то есть массив массивов
Пиздец. Во-первых, нет, во-вторых - двухмерный массив и массив массивов это разные вещи. Массив массивов это вообще такая ебанутая хуйня, что в неё не стоит лезть без скафандра нахуй.
>В реальности содержимое каждой клетки описывается как минимум ещё одним массивом (а зачастую и словарём), т.к. в ней надо хранить не только тыкву, но и тип земли, например.
Чего, блядь? Массив массивов массивов из словарей? Чет мало навернул, надо ещё списков нахуярить чтобы наверняка. И что, у тебя будет словарь с ключом из массива массивов, который хранит тип земли? Вот такие шизоиды только не лезут в треды ньюфагов и воспитывают новое поколение говнокодеров, пиздец.
Аноним 17/01/21 Вск 22:07:06 721868 11
>>721859
Бро, ты вроде шариш. Может подашь идею, каким образом опу решать его проблему
Аноним 17/01/21 Вск 22:14:00 721869 12
>>721859
> пук
Что сказать-то хотел?
Двумерный массив реализуется массивом массивов во всех популярных скриптовых языках.

Что касается способа хранения информации об игровой ячейке, он-таки обычно и представляет из себя словарь (в терминах питона) или объект (в терминах js). Если только, повторюсь, разработчик не захотел разнести разнородную информацию по отдельным двумерным массивам.
Аноним 17/01/21 Вск 22:15:45 721871 13
Оп-даун нихуя не пояснил, какой у него движок (язык). Что и как он пытается делать

>>721859
Если это на жыэс, то там именно массив массивов и других структур толком и нет, типа словарей или многомерных массивов.
Аноним 17/01/21 Вск 23:03:35 721891 14
>>721859
А вот и сеньоробляди пожаловали. Сенька, научи нас ньюфагов как надо? Нет? Ну так и иди нахуй.
Аноним 17/01/21 Вск 23:44:50 721895 15
>>721871
> то там именно массив массивов и других структур толком и нет, типа словарей или многомерных массивов
Недавно вспомнил давно забытый трюк, как без задней мысли получить двумерные координаты в одномерном массиве. Способ кажется простым но обладает дичайшими подводными камнями. Итак. Чтобы получить (x, y) из одномерного массива, мы должны смело, отважно предположить, сколько у нас столбцов. И теперь, мы не менее смело предполагаем, что наш массив заполняется построчно, когда строка заканчивается, начинается новая строка с первого столбца. Таким образом, если мы поделим нацело на число столбцов, мы получим строку, а если мы возьмём остаток от этого деления, мы получим столбец.
Подводные камни в том, что нельзя добавлять и удалять значения по одному. Изволь удалять целыми строками. Сортировка столбцов - отдельная песня. Формируй отдельный массив из значений каждого столбца. Сортируй нужный. Запоминай порядок. Выставляй порядок согласно запомненному в остальных столбцах.
Аноним 18/01/21 Пнд 04:48:49 721946 16
>>721754 (OP)
Ну, представь, что сцена это просто координатная сетка определенных размеров + список всех объектов, которые в сцене расположены. Абсолютно каждый объект имеет поле, которое показывает его координату. Как только сцена загружается, специальная функция спавнит все нужные объекты, тупо проходя по списку.
Аноним 18/01/21 Пнд 14:33:47 722026 17
>>721754 (OP)
Берёшь, делаешь структуру chunk. В чанке есть WxW блоков, то есть ширина и глубина равна W, что есть константа. Все чанки кладёшь в какой-нибудь ассоциативный массив типа хештаблицы, хештаблицы хештаблиц, дерева какого (?), в общем у них ключ это координаты чанка (x,y или x,y,z для 3D).
В каждый блок может быть установлена, например, переменная с типом node. node состоит из указателя на NodeData и некоторых внутренних данных, которые надо сохранять и изменять.
Внутри NodeData имеются некоторые поля, которые описывают твой объект (пашня, кусок дома, кусок моба). Это id, текстуры, анимации, модельки, шейдеры, физические свойства, что он дропает, какие коллбеки на разные виды интеракции с игроком, коллбек на процессирование каждый фрейм или каждый физический фрейм и т.д.
В node могут быть ещё переменные, которые могут быть разными для одинаковых объектов. Например, есть объект Зомби и у одного осталось 50 ХП, а у другого 100 ХП.
Конечно, можно объединить типы node и NodeData, чтобы второй имел тот же тип, что и node и когда создаётся новый node, оно просто копирует соответсвующий NodeData. Это даст больше гибкости, можно будет, например, изменить модельку и текстуру твоего объекта, но с другой стороны это даст сложности с обновлением игры. Например, у тебя объект пашня и в старой версии на нём рос рис 50 минут, а в новой версии 30 минут ты захотел сделать. И когда игрок загрузит игру у него пашня будет всё-равно 50 минут растить рис. Поэтому не всегда так надо.
Далее, если надо отрисовать чанк, то проходишь по каждому блоку и если этот блок не динамический (не меняет модельку каждый фрейм или нет анимации), то сохраняешь его вертексные данные в массив графических данных самого чанка. И текстурку батчишь из текстурок всех объектов. А рядом складываешь графические данные для динамических объектов.

Не уверен в этом подходе, он у меня сам придумался, когда пилил свои игры.
Аноним # OP 18/01/21 Пнд 21:14:27 722132 18
тест
Аноним # OP 18/01/21 Пнд 21:15:03 722133 19
>>722026
Какой ужас. Я не настолько разбираюсь, чтобы хоть что то понять.
Аноним 18/01/21 Пнд 22:09:47 722146 20
>>722133
Чел, программирование - это математика только но под другим соусом
Аноним 18/01/21 Пнд 22:46:27 722157 21
Аноним 21/01/21 Чтв 16:15:21 722828 22
>>722157
Как просвящаться ? Еще один популистичный ролик без информации. Даже любые циклы уроков по программированию слишком поверхностные и маленькие. Про зарубежные тоже ничего не говори, там тоже самое.
Аноним 21/01/21 Чтв 18:40:00 722849 23
>>722828
Ты не понял. Ну или не смотрел, а только с названия кликбейтного пригорел. Посмотри (ещё раз) внимательно и до конца.
Аноним 21/01/21 Чтв 21:46:37 722885 24
>>722849
Ок, попробую до конца, может позже напишу результат
Аноним 21/01/21 Чтв 22:07:38 722890 25
9ef795e55076f5c[...].jpg 25Кб, 300x189
300x189
>>722849
>>722157
ОООО, я замотивировался уже в 84 раз в жизни. В этот раз точно уж что то выйдет. А то до этого я не понимал по урокам, как мне дальше то делать, а тут вот оно что.
Аноним # OP 24/01/21 Вск 09:47:30 723435 26
ТЕст
Аноним # OP 24/01/21 Вск 09:48:03 723436 27
Модераторы. Можете удалять тред, не нужен.
Аноним 26/01/21 Втр 04:44:53 723813 28
>>722146
>программирование - это математика
Неправда. Программирование - это логика и алгоритмы. Математика в программировании только в прикладной реализации математических формул, но бОльшая часть задач решается либо без формул совсем, либо с формулами из средней школы. Сегодня программирование вообще на 99.99% состоит из запросов к различным API, передаче параметров из одного места в другое. Программисты разработали для математиков множество "математических" языков, чтобы математики оставили программистов в покое и могли писать свои матановские формулы самостоятельно, однако никто не заставляет тебя играть в математика и программировать на языке для математиков.

В этой теме вообще только структуры данных обсуждаются. В математике нет данных, это только программерская фича.
Аноним 26/01/21 Втр 05:24:40 723815 29
>>721754 (OP)
Такие игры устроены как-то так:
1. Есть "палитра объектов" и/или "палитра тайлов". В ней хранятся записи с информацией о каждом объекте, который может располагаться на карте, будь то тайл земли, кустик или домик. Эта информация может содержать: ссылку на спрайт, проходимость (может ли игрок встать на клетку с этим объектом), какие-либо дополнительные свойства (например, клетка с этим объектом замедляет игрока или наносит ему урон). Палитра нужна для того, чтобы можно было обращаться к единственному объекту в палитре по его номеру.
2. Есть "карта". Это двухмерный или, чаще, трёхмерный массив целых чисел. Каждое число - номер объекта в палитре. Подобные массивы как правило имеют небольшой размер, но их может быть несколько - это позволяет разделить игровой мир на локации/комнаты и сэкономить на оптимизации отображения. Два измерения массива (x, y) отвечают за расположение объекта относительно камеры, третий (z) отвечает за сортировку объектов по глубине (0 - нижний, 1 - поверх него, 2 - поверх их всех). Но в глубину такие карты обычно очень маленькие - хватает 3 слоёв (основной тайл, тайл с дыркой, объект; пример: земля, песок, яблоко - яблоко лежит на земле, частично присыпанной песком).
3. Чтобы нарисовать нашу "карту", мы делаем следующее: организуем два/три вложенных цикла со счётчиком (for), перебираем все ячейки массива-карты. Берём значение из ячейки - если не ноль, тогда ищем в палитре объектов объект с таким же номером. Рисуем тайл/спрайт этого объекта в определённом месте экрана. Место на экране определяется из координат ячейки в массиве (x, y), помноженных на размер тайла карты (для обычных квадратных тайлов это просто). В целях оптимизации мы можем заранее определять, находится тайл на экране или он находится вне экрана, это достаточно просто для обычных квадратных тайлов.
4. Чтобы перемещаться по карте, взаимодействовать с объектами - во время перемещения фигурки игрока мы храним его позицию (x, y) в массиве карты. Перед тем, как переместить игрока, мы проверяем, в какую ячейку массива карты он хочет переместиться. Находим в палитре все связанные с этой ячейкой объекты (все - по оси z), проверяем параметры этих объектов (проходимость и накладываемые эффекты). Учитывая эти параметры, мы либо запрещаем перемещение игрока, либо перемещаем и, при необходимости, накладываем на него дополнительный эффект (а ещё может быть ситуация, когда игрок не перемещается, но получает эффект - к примеру, ожог от костра). В случае взаимодействия игрок не собирается перемещаться, тут нужно смотреть другие параметры объектов в палитре (можно ли объект взять в руки или как-то использовать и т.п.).
5. Если предполагается взаимодействие с картой с помощью мыши - мы, во-первых, должны вычислять позицию курсора мыши в координатах массива карты. Для этого достаточно знать размер тайла карты, смещение карты относительно экрана, позицию курсора в пикселях. Формулы несложные, их легко подобрать методом тыка. Узнав координаты в массиве, мы точно так же проверяем объекты по палитре объектов.
6. Сохранение карт может производиться двумя способами: если это полностью редактируемая карта как в Террарии, тогда она сохраняется в том же формате, в котором загружается; если игрок ограничен и может только изменять состояние отдельных элементов в целом статичной карты, тогда достаточно хранить список изменений, отличающих оригинальную карту от сохраняемой, и во время загрузки применять эти изменения к исходной карте (так сохранение будет занимать значительно меньше места).

Однако большинство из перечисленного актуально только для разработки игры с нуля на самодельном движке или на очень простом фреймворке. Большие движки как правило имеют встроенные компоненты для оперирования тайловыми картами. В случае использования такого движка остаётся только изучать его документацию и смотреть примеры использования его инструментов. Также существуют конструкторы игр - это ещё более простые в освоении инструменты, с ними сделать игру сможет даже маленький ребёнок. Если в твоей игре не планируется чего-то сверхсложного или уникального как в Террарии, тогда присмотрись в первую очередь к конструкторам игр (к примеру, RPG Maker). Если нужны какие-то необычные функции - присмотрись к движкам общего назначения (к примеру, Unity). Писать же игру с нуля тебе потребуется, только если нужно "выжать из железа максимум" - как это делает Terraria. В таком случае стоит присмотреться к SDL и различным простым фреймворкам, но с твоим уровнем знаний ты не потянешь разработку собственного игрового движка.

Также замечу, что техническая реализация игровой карты и взаимодействий с ней - очень малая часть разработки подобной игры. Гораздо важнее нарисовать качественную графику, написать сюжет, продумать геймплей. Игрокам совершенно безразлично, какой код ты напишешь и какой движок используешь - они будут смотреть на графику, читать диалоги и описания, слышать музыку, взаимодействовать с предметами и т.д. Если ты не умеешь рисовать и не имеешь чёткого представления будущей игры - задумываться о программировании такой игры смысла нет.

Сам я могу и уже пробовал делать такие игры, но забрасывал в том числе потому, что не смогу в контент...
Аноним 26/01/21 Втр 08:02:19 723821 30
>>721754 (OP)
Ты спрашиваешь элементарные вещи.

В общих словах, ты берёшь объекты и сохраняешь их в массив данных, или таблицу для простоты.

Потом когда подгружается область мира ты подгружаешь эти объекты.

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

Проверяешь, если объект в радиусе, то добавляешь его в список обработки, либо делаешь активным. Разумно предусмотреть подобные статусы заранее. Я люблю иметь 3 статуса:

1. inactive - полностью неактивный объект, который никак не обрабатывается, пока действует этот статус, для ещё большей оптимизации можно создавать отдельный список неактивных объектов, которые проверяются переодически, а не каждый тик

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

3. active - полностью активный объект, обрабатываемый каждый игровой тик

Альтернатива радиусу - область видимости, ещё есть ячейки. На самом деле вариантов больше десятка как это можно реализовать.

Более интересно на мой взгляд именно способ хранения. Если игровой мир большой я предпочитаю использовать ячейки, а именно мир поделён на области, которые подгружаются в зависимости где находится игрок. Соседние ячейки загружаются и имеют лениво обрабатываемые объекты. Когда игрок приходит в зону, эти объекты могут находится в других местах или в другом статусе, что создаёт иллюзию живого мира.

Так же при загрузке области я произвожу генерацию событий, а именно обсчёт исходят из пропущенного времени. Симулируется в упрощёном виде то, что могло бы произойти за 10 минут отсутствия в конкретной ячейки непример и так как это происходит на фоне, то игрок не увидит как за его областью видимости произошла по сути генерация событий. Для игрока будет казаться, что игровой мир постоянно существует, а не выгружается и не становится неактивным.
Аноним 28/01/21 Чтв 19:43:09 724213 31
>>723821
>элементарные вещи
Ты какой-то сложной узкоспециальной фигнёй его грузишь, имхо. Даже я не совсем понял, что ты хочешь объяснить. Ему нужна простая тайловая карта, которую вообще не нужно никак оптимизировать, ведь она будет маленькой, это тебе не опенворлд и даже не Fallout 1. Все перечисленные тобой оптимизации нужны для больших игр с открытым миром, обычно это 3D игры, в которых симулируется реальная физика и есть множество графически сложных объектов. А он в примеры приводит 2D-игры с тайловой картой, в которых ни физики, ни сложной графики нет. Оптимизировать всё это придётся только в двух случаях: если нужен опенворлд на десятки километров без деления на "комнаты", и если игра пишется на каком-нибудь слоупочном и жирном говне вроде питона.

>берёшь объекты и сохраняешь их в массив данных
В массив нужно сохранять числа. Дублирование ООП-объектов - это одна из главных причин тормозов, тем более в скриптовых ЯП. Вот если у тебя на карте 5 одинаковых деревьев в виде спрайтов, что тебе мешает разместить в том массиве индекс, который будет однозначно указывать на объект "дерево" в палитре объектов? Рендерер сам найдёт этот объект и разместит его на карте - не нужно дублировать данные объекта "дерево" пять раз. Потому что этих деревьев может быть не 5, а 125 или 5000, и пять тысяч спрайтов занимают намного больше места, чем пять тысяч integer (хотя тут хватит и word, в два раза меньше места займёт, вряд ли в игре будет больше 65к видов объектов).
Аноним 28/01/21 Чтв 21:43:51 724231 32
>>724213
> В массив нужно сохранять числа. Дублирование ООП-объектов - это одна из главных причин тормозов, тем более в скриптовых ЯП. Вот если у тебя на карте 5 одинаковых деревьев в виде спрайтов, что тебе мешает разместить в том массиве индекс, который будет однозначно указывать на объект "дерево" в палитре объектов?

Во всех современных языках ООП-объекты имеют ссылочный тип. Это значит, что если новичок специально не заморочится каким-то особым дублированием, а просто положит ООП-объект дерева во все ячейки карты с деревьями, ничего плохого не случится.
Аноним 28/01/21 Чтв 23:03:37 724241 33
>>724231
>ничего плохого не случится
Если у нас массив ссылок на ООП-объекты, при этом имеется большо одной ссылки на один и тот же объект, можно случайно удалить объект по ссылке и получится куча ссылок на недопустимую область памяти, и нуб встретится с EAO или её аналогом. А вообще лучше ООП не трогать.
Аноним 28/01/21 Чтв 23:12:58 724242 34
>>724241
>можно случайно удалить объект по ссылке
А где такое вообще есть? В JS, Lua и питоне точно нету. Вообще, ссылка на недопустимую область памяти - это что-то раздела крестопроблем, в нормальных языках есть сборщик мусора.
Аноним 28/01/21 Чтв 23:56:30 724248 35
>>724242
>есть сборщик мусора
>в нормальных языках
В нормальных языках объекты нужно уничтожать руками, сборщик мусора только помогает в этом. В ненормальных языках говнокодер ни на что повлиять не может - объекты накапливаются в памяти, а "сборщик мусора" периодически пропукивает скопившиеся объекты. Лучше не пользоваться такими языками с пропукивающим "сборщиком мусора", это вообще не сборщик, это пропукиватель мусора. В случае JS, увы, альтернативы нет.
Аноним 30/01/21 Суб 17:52:43 724454 36
>>724248
Дед, ты опять таблетки не принял? Еще предложи диздок ручкой в блокнот писать.
Аноним 31/01/21 Вск 02:08:25 724512 37
Аноним 31/01/21 Вск 07:41:59 724527 38
>>721754 (OP)
Не понимаю что тебя смущает. Ну сделай большой двумерный массив. Не помещается, слишком тяжёлый? Раздели на части и рендерь только часть.
Аноним 01/02/21 Пнд 02:58:23 724793 39
38265636.png 6Кб, 640x470
640x470
Без названия (1[...].jfif 104Кб, 1050x1400
1050x1400
Без названия.jfif 163Кб, 830x1182
830x1182
>>721754 (OP)
>дальнейшее сохранение на локации
Достигается хорошим движком>>721754 (OP)
>именно расположение объектов на области
Знаниями геометрии, школьный курс. Алгебры, школьный курс.
Аноним 13/02/21 Суб 15:32:53 727641 40
>>724793
>Достигается хорошим движком
Понял, главное движок, а что писать туда для сохранения, это уже не важно.

>Знаниями геометрии, школьный курс. Алгебры, школьный курс.
Держи в курсе идиот
pidor 15/02/21 Пнд 16:48:41 727939 41
List<GameObject> level = new List<GameObject>)(;

/thread
Аноним 15/02/21 Пнд 16:54:09 727940 42
>>727939
Эльфийский язык ? Почему все должны учить тот же код, что и ты ? Ну ты и боярин конечно..
Аноним 15/02/21 Пнд 17:03:27 727943 43
>>727939
Ну, создал ты список, и чо? Где загрузка, где выгрузка, где менеджмент? Мы вам перезвоним. (Нет.)
Аноним 17/02/21 Срд 00:22:08 728126 44
>>727940
эта язык на котором написан ваш страдивари
Аноним 17/02/21 Срд 18:21:54 728234 45
>>728126
Ты шизоид ничего так и не объяснил, в отличии от постов выше.
Аноним 18/02/21 Чтв 07:01:14 728311 46
>>721754 (OP)
Храни отдельно карту, а отдельно список объектов.
Карта статична, а у объектов может быть свои свойства и позиция на карте.
Свойства объекта не должны обновляться не в каждом кадре, а при наступлении к-либо события.

сохранение и загрузка = это сериализация/десериализация. с сохранением/восстановлением нужных параметров.
Например:
У тебя на локации: 10 клумб. У каждой есть позиция(x,y(float)), степень полива(float), количество цветов(int). При сохранении должэн быть создан файл с содержимым:
{[
{posX: 3; posY: 5; watering: 1,2; count: 3}
{posX: 6; posY: 2; watering: 1,2; count: 2}
...
{posX: 4; posY: 4; watering: 0,3; count: 6}
]}
При загрузке этот файл считывается и интерпретируется твоей программой (клумбы расставляются на свои места, неполитым цветам назначается отдельная анимация, отрисовывается нужное количество цветов)
Аноним # OP 18/02/21 Чтв 19:35:21 728472 47
Тест
Аноним # OP 18/02/21 Чтв 19:35:50 728474 48
>>728311
Звучит вроде понятно. А сохранять всю эту лабуду наверное в массив.
Аноним 19/02/21 Птн 06:12:24 728542 49
>>728474
Cоздай класс FlowerBed(В котором будут реализованы свойства и функции клумбы); создай класс MapController(он будет управлять картой) в котором будет храниться список FlowerBed-ов.
(используй списки - если количество элементов не определено, массивы - если количество элементов четко определено.)Например: предметы в инвентаре - список.(они могут добавляться, удаляться)
Информация о тайлах на карте - массив (у тебя четко определенный размер карты на каждом уровне(map[x][y]))

Для сериализации есть уже готовые библиотеки, при помощи которых, одной строчкой кода ты можешь преобразовать свой класс MapController в json и сохранить в папке игры.
можно конечно написать свою функцию сериализаци/десериализации, но это будет дольше, дороже(в плане производительности) и хуевее
Аноним 23/02/21 Втр 00:11:54 729347 50
Почему не на гамаке?
Аноним 23/02/21 Втр 17:43:43 729437 51
>>729347
А почему должен на нём ? Чтобы учить язык, который нужен только на гамаке ? Потому, что легче на конструкторе.
Аноним 23/02/21 Втр 19:27:45 729462 52
>>729347 Ты уже в сектанта-посмешище превращаешься.
Аноним 23/02/21 Втр 20:44:34 729476 53
>>721754 (OP)
Сначала выучи азбуку, потом читай "Войну и мир". Задача тривиальная, но необъяснимая на твоём уровне знаний.
23/02/21 Втр 21:23:40 729484 54
>>729437
потому что на гамаке можно выпустить все свои 2д проекты и перейти к 3д в юнете, так как геймплейно 3д сильно отличается от геймплейно 2д, и смена языка на новый тут будет только плюсом, ящитаю
Аноним 24/02/21 Срд 18:52:58 729613 55
>>729484
>выпустить все свои 2д проекты и перейти к 3д в юнете
Не хочу так. Хочу только 2D. Юнити тяжёлая, лагающая тягомотина. Уходи шиз. Продолжай переходить на 3д в своём гамаке.
Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов