СпрайтКит + iOS8. Поддерживает ли SpriteKit запекание результатов рендеринга?

Я реализую программу рисования в SpriteKit, и я очень впечатлен простотой реализации, которую позволяет SpriteKit. Очень действительно круто!

Каждый мазок кисти реализован как SKSpriteNode с прикрепленным SKShader. Все работает так, как я ожидаю.

Проблема: в настоящее время я неуклонно увеличиваю график SKScene по мере добавления мазков кисти. Это не масштабируемое решение, поскольку потребление ресурсов растет как грибы, а частота кадров снижается до минимума. Итак, что я хочу сделать, «запечь» график SKScene после того, как мазок кисти будет нарисован.

Я попытался установить myScene.shouldRasterize = YES на моем экземпляре SKScene, но это не дало никакого эффекта. Как «запечь» результаты рендеринга в SpriteKit? Должен ли я катить свой собственный?

Спасибо,
Дуг


person dugla    schedule 18.08.2014    source источник


Ответы (2)


Единственное, что я мог придумать, это вызвать textureFromNode при передаче SKView в SKNode, которое вы хотите "запечь". Затем возьмите эту текстуру, примените ее к SKSpriteNode и удалите SKNode(ы), которые вы только что «запекли» в текстуру.

person Mike S    schedule 18.08.2014
comment
Ага. Именно к такому подходу я склоняюсь. Привет, Майк. - person dugla; 19.08.2014

Хотел добавить комментарий, но репутация не позволяет. Просто хотел бы добавить, что вы можете растеризовать группу спрайтов, используя SKEffectNode. Просто добавьте любой спрайт в этот узел, затем используйте то же свойство shouldRasterize. Вы даже можете применить к нему фильтры CoreImage, такие как Gaussian Blurs.

Недостатком, очевидно, является производительность при создании растеризованного узла.

person gzafra    schedule 19.08.2014
comment
Спасибо, Уиллхем. Я пошел с textureFromNode, и результаты именно то, что я хочу. SpriteKit невероятно продуктивен. Для большинства 2D, которые я использовал для OpenGL/GLSL, я могу использовать SpriteKit/GLSL. - person dugla; 21.08.2014