Хобрук: Ваш путь к мастерству в программировании

Масштабирование SkSpriteNodes с помощью SpriteKit

Я разрабатываю игру, у меня есть различные узлы, которые масштабируются.

в зависимости от устройства (ipad/iphone) они имеют максимальный размер от 50 до 128 (выход println("\(size)")), поэтому я предполагаю, что максимальный размер должен быть 3x128, верно?

при масштабировании происходит следующее:

  • начальный размер (0,0)
  • окончательный размер (max,max) -- это размеры, упомянутые выше.

я масштабирую с помощью SKAction так:

let imageName = NameGenerator.defaultGenerator.generateAssetName(properties: properties)
let texture = SKTexture(imageNamed: imageName)
let node = SKSpriteNode(texture: texture)

let initialSize = CGSizeMake(1, 1)
let scaleFactor = max / initialSize.width
let actionScale = SKAction.scaleTo(scale, duration: duration)

node.runAction(scale)

Все идет нормально. приложение работает гладко и все работает, но

  • узлы сильно пикселизированы во время анимации масштабирования

мои активы в настоящее время хранятся только в размере @3x в 300x300px

вопрос

  • каков оптимальный формат текстуры (png, svg,...) - есть ли способ использовать векторные изображения?
  • Как вы думаете, какой оптимальный размер текстуры для этого сценария?
  • правильно ли я делаю масштабирование/инициализацию или мне нужно сделать что-то другое, чтобы избежать пикселизации?

Ответы:


1

Все будет хорошо, если вы будете использовать файлы png. Векторные форматы не поддерживаются. Если вы хотите их использовать, вам придется преобразовать его в формат растрового изображения, такой как png.

Что касается оптимального размера текстуры, это действительно будет вопросом проб и ошибок, а также взвешиванием компромиссов.

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

Что вы можете попытаться сделать, так это определить, какой, по вашему мнению, будет «оптимальный» или наиболее часто используемый размер. И используйте этот размер в качестве масштаба x1.

Разработка игр — это баланс между ресурсами/производительностью и тем, что испытывает пользователь. Вам нужно попытаться найти лучший компромисс для вашей игры.

Кстати, я нашел это утверждение немного запутанным:

в зависимости от устройства (ipad/iphone) они имеют максимальный размер от 50 до 128 (вывод println("(size)")), поэтому я предполагаю, что максимальный размер должен быть 3x128, верно?

Я не совсем уверен, что вы пытаетесь этим сказать.

30.11.2014
  • Я определяю максимальный размер с соотношением сторон экрана, чтобы игра работала плавно и сбалансировано на всех устройствах iOS. это означает, что размеры немного различаются в зависимости от используемого устройства. 01.12.2014
  • Новые материалы

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

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

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..