将AnchorPoint添加到SKNode会破坏SKScene的定位

时间:2016-05-08 03:14:04

标签: ios swift skspritenode

我想让我的SKCameraNode从左下角开始,并将我的背景也固定在那里。当我将锚点设置为CGPointZero时,以下是我的相机显示的内容: enter image description here

编辑: 有趣的是,如果我将我的AnchorPoint设置为CGPoint(x:0.5,y:0.2),我会把它排成一行。它与相机比例有关吗?

编辑2: 如果我改变场景大小,我可以改变背景节点出现的位置。通常它们的锚点位于屏幕中央,这意味着场景的anchorPoint位于屏幕的中心。

我是使用SKCameraNode的新手,因此我可能错误地设置了它的约束。

以下是我的相机限制:我还没有添加我的播放器,但我想在添加播放器之前先设置我的世界。我再次尝试将所有内容都锚定在CGPointZero之外。

 //Camera Settings

    func setCameraConstraints() {

        guard let camera = camera else { return }

        if let player = worldLayer.childNodeWithName("playerNode") as? EntityNode {

            let zeroRange = SKRange(constantValue: 0.0)
            let playerNode = player
            let playerLocationConstraint = SKConstraint.distance(zeroRange, toNode: playerNode)

            let scaledSize = CGSize(width: SKMViewSize!.width * camera.xScale, height: SKMViewSize!.height * camera.yScale)

            let boardContentRect = worldFrame

            let xInset = min((scaledSize.width / 2), boardContentRect.width / 2)
            let yInset = min((scaledSize.height / 2), boardContentRect.height / 2)

            let insetContentRect = boardContentRect.insetBy(dx: xInset, dy: yInset)

            let xRange = SKRange(lowerLimit: insetContentRect.minX, upperLimit: insetContentRect.maxX)
            let yRange = SKRange(lowerLimit: insetContentRect.minY, upperLimit: insetContentRect.maxY)

            let levelEdgeConstraint = SKConstraint.positionX(xRange, y: yRange)
            levelEdgeConstraint.referenceNode = worldLayer

            camera.constraints = [playerLocationConstraint, levelEdgeConstraint]
        }
    }

我一直在使用Udemy课程来学习SKCameraNode,我一直在尝试修改它。

这是我设置SKMViewSize的地方:

    convenience init(screenSize: CGSize, canvasSize: CGSize) {
        self.init()

        if (screenSize.height < screenSize.width) {
            SKMViewSize = screenSize
        }
        else {
            SKMViewSize = CGSize(width: screenSize.height, height: screenSize.width)
        }

        SKMSceneSize = canvasSize

        SKMScale = (SKMViewSize!.height / SKMSceneSize!.height)

        let scale:CGFloat = min( SKMSceneSize!.width/SKMViewSize!.width, SKMSceneSize!.height/SKMViewSize!.height )
        SKMUIRect = CGRect(x: ((((SKMViewSize!.width * scale) - SKMSceneSize!.width) * 0.5) * -1.0), y: ((((SKMViewSize!.height * scale) - SKMSceneSize!.height) * 0.5) * -1.0), width: SKMViewSize!.width * scale, height: SKMViewSize!.height * scale)

    }

我怎样才能让相机受到我的世界的约束,并将所有东西都固定在CGPointZero上?

0 个答案:

没有答案