Я новичок в SpriteKit и разработке игр в целом, я играл с SpriteKit, чтобы создать стратегическую игру в космосе.Оказание большой сетки с помощью SpriteKit
Моя базовая архитектура использовать подвесную систему, чтобы представить Вселенную, у меня есть пустые случаи и случаи с системами/планеты/и т.д ... Моя сетка поддерживается GameplayKit GKGridGraph
, я использую алгоритм, который генерирует узел с случайным свойства для каждого узла сетки и я подклассифицировал его для добавления к нему настраиваемого объекта, который обладает всеми свойствами этого конкретного случая универсума.
Чтобы сделать это, я просто использую SKShapeNode
и SKPriteNode
с различными цветами, формами и текстурами.
я перечисляю все узлы (GKGridGraphNode
) в моем GKGridGraph
, например, и для каждого из этих узлов, которые я получаю генерировать соответствующие SKNode
(мои SKNode
поколения является составной частью каждого GKGridGraphNode
объекта прикрепленного объекта), и я поставил их позицию, и добавьте их в качестве дочернего элемента в мой основной узел (назовем его mapNode), который является простым SKNode
. В итоге это выглядит как сетка.
Он хорошо работает для сетки 30/30, у меня есть 60 FPS при прокрутке моей сетки (пользовательская реализация, я изменяю свой mapNode positon, когда пользователь перемещает пальцы). Но как только я попробую сетку 50/50 или 100/100, у меня буквально слишком много узлов на экране, чтобы прокрутка работала. Я знаю, что не следует добавлять каждый из моего узла на экране, так что я думал о различных стратегиях, и я хотел некоторый вход на них:
Вместо прокрутку моего mapNode, я мог вынести только те узлы, которые я вижу на экране, а затем добавьте/удалите узлы, когда пользователь прокручивает влево/вправо/вверх/вниз. Так что это больше не прокрутка, она имитирует. Я могу подумать об этом, но на самом деле не так, как я должен реализовывать его на практике. Это правильное решение?
Возможно, я мог бы отобразить весь мой узел как один большой узел? Есть ли способ сделать это? Но тогда я потеряю функции, такие как
nodeAtPosition
, которые я широко использую, чтобы получить объект (пользовательский объект), связанный с моими узлами.
Edit: На самом деле, мой текущий код является открытым исходным кодом, вот сцена Я рендеринга: https://github.com/Dimillian/LittleOrion/blob/master/Little%20Orion/Little%20Orion/scenes/UniverseScene.swift
Есть ли другой умный способ сделать это?
подтвердили, что это медленно с помощью реального устройства? – hamobi
Да, 17 FPS на симуляторе, 40 FPS как статический узел на устройстве, но как только ваш старт перемещает ваш палец, он останавливается до менее 1 FPS, и вы не можете эффективно прокручивать его. – Dimillian
Вы должны динамически загружать и выгружать данные в узлы набора спрайтов по мере прокрутки содержимого. Вы просто не можете загрузить все данные загодя, просто измените свой код, чтобы динамически проверить квадратное перекрытие, чтобы определить, какие узлы загружать и отображать. Это в основном то же самое, что и черепица, поэтому вам, скорее всего, захочется заглянуть в новую поддержку Tile в iOS 10 и построить на ней. – MoDJ