Swift:SKCameraNode的定位Children

Swift: Positioning Children of the SKCameraNode

上下文:

下面给出一个简单的原理图

目标: 目标是将两个精灵添加到相机视图的左下角和右下角。精灵将 children 的相机,所以他们总是留在视野中。

问题

如何将 sprite 放置在相机的角落,特别是考虑到 SKSpriteNode 没有 具有 anchorPoint 属性(作为SKSpriteNode 通常有,这让我可以将相机作为 child 偏移到光标)?

注意:可以将 SKSpriteNode 放在 GameScene 上,然后调用 .move(toParent: SKNode),这样可以拉近距离,但也会弄乱 [=13] 的位置和比例=]s

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
        ...

最好用 "dummy node" 作为相机屏幕 space 坐标系来解决这个问题。

将此虚拟节点作为相机的子节点放置在相机视图的确切中心,您满意的 zPosition。

...from SKCameraNode docs page:

The scene is rendered so that the camera node’s origin is placed in

the middle of the scene.

将所有 HUD 元素和其他图形和对象片段附加到这个虚拟对象,相对于相机,在一个相对于相机的坐标系有意义的坐标系中 "angle of view" ,这是它的视野。

...from a little further down the SKCameraNode docs page:

The camera’s viewport is the same size as the scene’s viewport (determined by the scene’s size property) and the scene is still scaled by its scaleMode property when it is rendered into the view.

每当相机移动时,它就会移动虚拟对象,并且虚拟对象的所有子对象都会随着虚拟对象移动。

这种方法的最大优点是您可以摇动或以其他方式移动虚拟对象以创建指示运动和爆炸的视觉效果。但也是一个从视图中删除的简洁系统。

cameraNode没有尺寸,但是可以通过frame获取当前屏幕尺寸属性

frame.size

然后你可以相应地定位你的节点,例如,如果你想将 yournode 的中心定位在左角,你可以将位置设置为:

yournode.position.x = 0
yournode.position.y = frame.size.height