SpriteKit - Фоновое изображение ужасно растянуто

Я установил режим игры spriteKit следующим образом:

scene.scaleMode = .aspectFill

И я установил свое фоновое изображение.

sky = SKSpriteNode(imageNamed: "Sky")
sky.position = CGPoint(x: 0, y: 0)
sky.size.width = self.size.width
sky.size.height = self.size.height
sky.anchorPoint = CGPoint(x: 0.5, y: 0.5)
sky.zPosition = 1
self.addChild(sky)

И размер изображения 2732x2048. Это выглядит ужасно на 4,7-дюймовом iPhone.
Все это завершено растянуто.
Есть ли способ, чтобы обрезать изображение, но не растягивая его, чтобы уместить его на iPhone (Тот же аспект радио для изображения).

Я пробовал другие режимы масштабирования, они не работают.
Может кто-нибудь сказать мне, что нужно сделать сейчас?

Что если я предоставлю изображение iPhone? Как отличить от кода, например, указать, какие обложки iPhone следует использовать, а какие обложки iPad.

1 ответ

Решение

Удалите линии, где вы устанавливаете размер неба, и вы должны выполнить следующие задачи:

Не устанавливайте размер в качестве рамки. Вместо этого установите размер изображения, чтобы оно было обрезано, а не масштабировано:

sky.size = sky.texture.size

Этот код будет заменой двух ваших строк, которые устанавливают его ширину и высоту.

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

В качестве альтернативы, вы можете сделать свое приложение универсальным, вот так. Взгляните на это: iOS Universal Device App со SpriteKit, как масштабировать узлы для всех представлений?, Затем вы просто делаете фон 1024x1024 (или любой размер, достаточно большой, чтобы соответствовать формату устройства всех размеров). Это обрезает часть этого на устройствах, которые не одинакового размера, но ваше соотношение сторон не будет меняться или масштабироваться для разных устройств.

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