Спрайты слегка искажаются при масштабном стремительном движении - PullRequest
0 голосов
/ 03 декабря 2018

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

Проблема, с которой я столкнулся, заключается в том, что спрайты становятсянезначительное искажение или смещение после их уменьшения.

Например, (image1), у меня есть граница и квадрат, квадрат должен идеально вписываться в границу без каких-либо пробелов.Однако, как вы можете видеть на моем втором изображении (изображение 2), в верхней части квадрата появляется небольшой источник света.

Image1

Image2

Масштабирование выполняется в самом начале (в 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, но это тоже не сработало.Назначение обоих спрайтов родительскому спрайту с последующим масштабированием родительского спрайта также не работает.

Извините за чрезвычайно длинный вопрос!Любая помощь будет оценена.

...