Я пытаюсь создать универсальную игру для iOS, в которой используются слегка увеличенные спрайты, чтобы их можно было немного уменьшить для размещения на любом устройстве.
Проблема, с которой я столкнулся, заключается в том, что спрайты становятсянезначительное искажение или смещение после их уменьшения.
Например, (image1), у меня есть граница и квадрат, квадрат должен идеально вписываться в границу без каких-либо пробелов.Однако, как вы можете видеть на моем втором изображении (изображение 2), в верхней части квадрата появляется небольшой источник света.
Масштабирование выполняется в самом начале (в GameViewController), я рассчитываю, какой должна быть ширина и высота gameScene, чтобы разместить мой код области отображения (750 x 450), приведенный ниже:
var fullAreaSize: CGSize!
override func viewDidLoad() {
super.viewDidLoad()
let skView = self.view as! SKView
skView.ignoresSiblingOrder = true
skView.showsFPS = true
skView.showsNodeCount = true
skView.isMultipleTouchEnabled = false
skView.showsPhysics = true
fetchDeviceSizes()
let scene = GameScene(size: fullAreaSize)
scene.scaleMode = .aspectFill
skView.presentScene(scene)
}
func fetchDeviceSizes() {
let focusAreaSize = CGSize(width: 750, height: 450)
let scaleX:CGFloat = focusAreaSize.width / view.bounds.size.width
let scaleY:CGFloat = focusAreaSize.height / view.bounds.size.height
if scaleX > scaleY {
fullAreaSize = CGSize(width: CGFloat(Int(view.bounds.size.width * scaleX)), height: CGFloat(Int(view.bounds.size.height * scaleX)))
} else {
fullAreaSize = CGSize(width: CGFloat(Int(view.bounds.size.width * scaleY)), height: CGFloat(Int(view.bounds.size.height * scaleY)))
}
}
Ниже я добавляю спрайты:
override func didMove(to view: SKView) {
anchorPoint = CGPoint(x: 0.5, y: 0.5)
backgroundColor = UIColor.white
let baseSprite = SKSpriteNode()
baseSprite.position.y = -1
addChild(baseSprite)
let borderSprite = SKSpriteNode(imageNamed: "border")
baseSprite.addChild(borderSprite)
let fillSprite = SKSpriteNode(imageNamed: "fill")
borderSprite.addChild(fillSprite)
}
По внешнему виду каждый спрайт масштабируется независимо, и поэтому два спрайта не совсем выравниваются (потому чтонезначительная прозрачность создается по краям спрайта).Есть ли что-нибудь, что можно сделать, чтобы не было такого смещения / искажения?Например, чтобы все спрайты сглаживались или отображались, а затем масштабировались (если я оставлю масштаб как нормальный, выравнивание будет идеальным)?
Я где-то читал, что использование int width и height должно остановить это смещение / искажение, но это, похоже, не сработало.Я также поиграл с scaleMode, но это тоже не сработало.Назначение обоих спрайтов родительскому спрайту с последующим масштабированием родительского спрайта также не работает.
Извините за чрезвычайно длинный вопрос!Любая помощь будет оценена.