上下文:
SKSpriteNode
SKCameraNode
并且是光标的子节点(即光标所在的位置,因此在摄像机后面)。 目标: 目标是两个精灵添加到摄像机视图的左下角和右下角。精灵将成为相机的孩子,因此他们总是留在视野中。
如何将精灵定位在相机的角落,尤其是SKSpriteNode
不具有anchorPoint
属性(作为SKSpriteNode
通常有,让我将相机作为孩子偏移到光标处?)
注意:可以将SKSpriteNode
放在GameScene
上,然后拨打.move(toParent: SKNode)
,这样可以让您关闭,但也会对SKSpriteNode
的位置和比例感到困惑小号
var cam: SKCameraNode!
let cursor = SKSpriteNode(imageNamed: "cursor")
override func didMove(to view: SKView) {
// Set up the cursor
cursor.setScale(spriteScale)
cursor.position = CGPoint(x: self.frame.midX, y: raisedPositioning)
cursor.anchorPoint = CGPoint(x:0.5, y:0.5)
cursor.zPosition = CGFloat(10)
addChild(cursor)
// Set up the camera
cam = SKCameraNode()
self.camera = cam
cam.setScale(15.0)
// Camera is child of Cursor so that the camera follows the cursor
cam.position = CGPoint(x: cursor.size.width/2, y: -(cursor.size.height * 4))
cursor.addChild(cam)
// Add another sprite here and make it child to cursor
...
答案 0 :(得分:2)
cameraNode没有大小,但您可以使用frame属性获取当前屏幕大小
frame.size
然后您可以相应地定位您的节点,例如,如果您想将yournode
的中心放在左角,则将位置设置为:
yournode.position.x = 0
yournode.position.y = frame.size.height
答案 1 :(得分:0)
这最好通过"虚拟节点"来解决。充当相机的屏幕空间坐标系统。
将此虚拟节点放在相机视图的正中心位置,作为相机的一个孩子,在您感到满意的z位置。
<强> ...from SKCameraNode docs page:
渲染场景,以便将摄像机节点的原点放在
中场景的中间。
将相对于相机要保留的所有HUD元素和其他图形和对象附加到此虚拟对象,在相对于相机的#34;#34中有意义的坐标系中;视角&#34;,这是它的视角。
...from a little further down the SKCameraNode docs page:
相机的视口大小与场景的视口大小相同 (由场景的大小属性决定)并且场景仍然是 当它被渲染到视图中时,由scaleMode属性缩放。
每当相机移动时,它会移动虚拟对象,虚拟对象的所有子对象都会随虚拟对象一起移动。
这种方法的最大优点是可以摇动或以其他方式移动虚拟物体,以创建指示运动和爆炸的视觉效果。但也是一个整洁的系统,以便从视野中删除。