问题无论相机位置如何,如何让紫色方块保持固定在屏幕的左下角?
详细信息我有一个名为colorScene的SKScene,它有一个摄像机节点和两个形状节点 - 一个蓝色和一个紫色方块。相机被限制在蓝色方块,位于0,0:
现在,我想把紫色方块放在屏幕的左下角。无论相机在哪里,我都希望它能留在那里。首先,我会将紫色方块作为相机节点的子项。但那又怎样?如果我将紫色方块定位在0,0,奇怪的是,它位于屏幕中间。 (相机节点不应该是整个屏幕区域吗?)如果我尝试使用convertPoint从摄像机节点转到场景坐标:
purpleNode?.position = convertPoint(CGPoint(x: 0, y: 0), toNode: cameraNode!)
......事情变得更加神秘:
答案 0 :(得分:0)
来自Apple文档:
渲染场景,使相机节点的原点位于场景的中间。
这应该解释你的经历
如果我将紫色方块定位在0,0,奇怪的是,它位于屏幕中间。 (不应该将摄像机节点作为整个屏幕区域吗?)
由于我们要将purple
放在屏幕的左下方,我们应该从与视图相关的坐标开始
let bottomLeftOfView = CGPoint(x: 0, y: view.frame.height)
接下来,我们需要将这些坐标从view
转换为scene
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)
}
}
purple
精灵中只有四分之一在屏幕内。这是因为它的anchorpoint
是(0.5,0.5):中心。所以我们告诉SpriteKit将purple
的中心放在屏幕的角落。
为了让紫色完全进入屏幕,我们只需告诉SpriteKit使用bottom left corner of purple
作为anchorpoint
purple.anchorPoint = CGPointZero
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)
}
}