SKTileMapNode: создание карты мозаики бесконечного размера

В Apple Documents утверждается, что вы можете сделать SKTileMap бесконечного размера

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

Я могу создать реалистичный ландшафт с помощью GKNoise, как утверждают Apple Documents. изображение 1

Я не могу, однако, сделать 1 гигантский SKTileMapNode бесконечного размера, который будет интенсивно работать на устройстве

В документах Apple говорится, что SKTileMapNode можно создавать только вокруг текущей позиции игроков (например, в Minecraft)

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

Мне нужно, чтобы "куски" были узлами SKTileMapNode, потому что мне нужно, чтобы деревья, камень, вода и т. Д. Были добавлены на карту, чтобы игрок мог взаимодействовать с ней.

0 ответов

Решение вашей проблемы начинается с создания плитки GKNoise. Вы, вероятно, используете GKNoiseMap для их генерации. Когда вы используете инициализатор:

let map = GKNoiseMap(_ noise: GKNoise, size: vector_double2,  
origin: vector_double2, sampleCount: vector_int2, seamless: Bool)

Важно: не забудьте установить для переменной "seamless" значение true.

Таким образом, вы получите мозаичную карту. Это выглядит лучше, когда вы делаете их больше экрана.

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

Например, одна карта может покрывать плитки размером 128х128. В этом случае каждый SKTile будет 16x16 пикселей

Вы делаете SKTileMap с плитками 128x128.

Теперь SKTileMap требуется фоновое изображение или определения листов (в данном случае это сгенерированный вами GKNoiseMap)

Теперь вы можете просто использовать ту же карту GKNoiseMap и разместить рядом с первой картой в любом направлении, содержащую другую карту плиток размером 128x128.

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

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

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

Вы также должны быть осторожны с хранением данных. Если каждый SKTile должен хранить переменные, отличные от того, что даст вам GKNoiseMap, бесконечные карты могут быть дорогими.

Другие вопросы по тегам