缩放后精灵会变得稍微变形

时间:2018-12-03 12:00:08

标签: swift sprite-kit sprite scale image-resizing

我正在尝试为iOS构建通用游戏,该游戏使用的精灵会稍微放大,以便可以将其稍微缩小以适合任何设备。

我遇到的问题是,按比例缩小后,精灵会变得稍微变形或未对齐。

例如(image1),我有一个边框和一个正方形,正方形应该完全适合边框内的任何间隙。但是,正如您在我的第二张图片(image2)中看到的那样,正方形顶部出现了一个小灯。

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宽度和高度应该可以阻止这种未对准/扭曲,但这似乎行不通。我也玩过scaleMode,但是这也没有用。将两个Sprite都分配给父Sprite,然后缩放父Sprite也无效。

很长的问题很抱歉!任何帮助将不胜感激。

0 个答案:

没有答案