Swift SpriteKit convertPoint视图/转换点

Swift SpriteKit convertPoint视图/转换点,swift,sprite-kit,Swift,Sprite Kit,问题如何使紫色方块固定在屏幕的左下角,而不考虑摄像机的位置 详细信息我有一个名为colorScene的场景,它有一个摄影机节点和两个形状节点——一个蓝色和一个紫色正方形。相机被约束到位于0,0: 现在,假设我想把紫色的正方形放在屏幕左下角。我想让它呆在那里,不管摄像机放在哪里。首先,我将使紫色正方形成为摄影机节点的子节点。那又怎么样?如果我把紫色正方形放在0,0,奇怪的是,它在屏幕中间。(摄影机节点不应该是整个屏幕区域吗?) purpleNode?.position = convertPoin

问题如何使紫色方块固定在屏幕的左下角,而不考虑摄像机的位置

详细信息我有一个名为colorScene的场景,它有一个摄影机节点和两个形状节点——一个蓝色和一个紫色正方形。相机被约束到位于0,0:

现在,假设我想把紫色的正方形放在屏幕左下角。我想让它呆在那里,不管摄像机放在哪里。首先,我将使紫色正方形成为摄影机节点的子节点。那又怎么样?如果我把紫色正方形放在0,0,奇怪的是,它在屏幕中间。(摄影机节点不应该是整个屏幕区域吗?)

purpleNode?.position = convertPoint(CGPoint(x: 0, y: 0), toNode: cameraNode!) 
…事情变得更加神秘:

来自苹果文档:

场景被渲染,使得摄像机节点的原点被放置在场景中间。 这应该可以解释你的经历

如果我把紫色正方形放在0,0,奇怪的是,它在屏幕中间。(摄影机节点不应该是整个屏幕区域吗?)

解决方案 由于我们希望将
紫色
放置在屏幕的左下角,因此我们应该从与视图相关的坐标开始

let bottomLeftOfView = CGPoint(x: 0, y: view.frame.height)
接下来,我们需要将这些坐标从
视图
转换到
场景

purple.position = convertPointFromView(bottomLeftOfView)
这是完整的代码

class GameScene: SKScene {

    override func didMoveToView(view: SKView) {
        super.didMoveToView(view)
        let camera = SKCameraNode()
        self.camera = camera
        addChild(camera)
        let purple = SKSpriteNode(imageNamed: "square")
        purple.color = SKColor.purpleColor()
        purple.colorBlendFactor = 1

        let bottomLeftOfView = CGPoint(x: 0, y: view.frame.height)
        purple.position = convertPointFromView(bottomLeftOfView)
        camera.addChild(purple)
    }
}

紫色与主播 只有四分之一的
紫色
精灵在屏幕内。这是因为它的
anchorpoint
是(0.5,0.5):中心。所以我们告诉SpriteKit把
purple
的中心放在屏幕的角落

为了让紫色完全进入屏幕,我们只需要告诉SpriteKit使用紫色的
左下角作为
主播点

purple.anchorPoint = CGPointZero

这是最后的完整代码
只需将紫色节点定位在-w/2和-h/2处,即可将紫色节点定位到左下角。将紫色节点添加到cameraNode,然后设置紫色节点x=-w/2,y=-h/2您的答案与我的预期相差甚远,似乎不可能。(加上我第一次试的时候漏掉了小的负号。)但你是对的!我道歉!不管我怎么努力,我都无法得到你的答案。直到我注意到我的相机位置。我刚刚将摄影机节点扔到场景中(使用场景编辑器),没有意识到其位置会影响其他计算。事实上,我错误地认为,因为我把相机限制在一个节点上,所以我不需要担心它。我还了解到SKView是NSView的一个子类,这解释了为什么0,0位于左上角。非常非常感谢!
class GameScene: SKScene {

    override func didMoveToView(view: SKView) {
        super.didMoveToView(view)

        let camera = SKCameraNode()
        self.camera = camera
        addChild(camera)

        let purple = SKSpriteNode(imageNamed: "square")
        purple.color = SKColor.purpleColor()
        purple.colorBlendFactor = 1
        purple.anchorPoint = CGPointZero

        let bottomLeftOfView = CGPoint(x: 0, y: view.frame.height)
        purple.position = convertPointFromView(bottomLeftOfView)
        camera.addChild(purple)

    }
}