SpriteKit - 节点未添加到 SKCameraNode - Swift

Posted

技术标签:

【中文标题】SpriteKit - 节点未添加到 SKCameraNode - Swift【英文标题】:SpriteKit - Nodes not adding to SKCameraNode - Swift 【发布时间】:2017-05-30 21:46:26 【问题描述】:

我试图将游戏手柄控制器固定在相机节点的左下角,但是当我将该节点添加为相机的子节点时,它没有显示出来?

let gameCamera = SKCameraNode()
var joypadBackground : SKSpriteNode = SKSpriteNode(imageNamed: "a")
override func didMove(to view: SKView) 

    //Set game camera
    self.camera = gameCamera
    joypadBackground.position = convert(CGPoint(x: 0, y: 0), to: gameCamera)
    joypadBackground.size = CGSize(width: 50, height: 50)
    joypadBackground.zPosition = 1000


    gameCamera.addChild(joypadBackground)


【问题讨论】:

【参考方案1】:

你不需要

convert(CGPoint(x: 0, y: 0), to: gameCamera)

您可以将 CGPoint 位置设置为 (0,0),它应该在相对于相机空间的那个点。

完全不确定这是否有帮助,但我所做的是(通常)在将子节点添加到其父节点之后定位它。对我来说,这主要是一个心理提醒,孩子的位置在父母的坐标空间内。所以我会做这样的事情:

gameCamera.addChild(joypadBackground)
joypadBackground.position = CGPoint(x: 0, y: 0)

如果您在 SKScene 中使用中间屏幕原点,则它应该位于屏幕中间。

左下角将是一个负 x 和负 y 值,其大小与您的帧大小有关。

【讨论】:

【参考方案2】:

我第一次使用 SKCameraNode 并创建平视显示器时遇到了同样的问题。

基本上,您必须记住相机有两个部分。运行它的功能并渲染它的孩子。通过将场景的相机设置为 gameCamera,您已经设置了功能,但您的相机不在用于渲染的节点树中。因此,如果您有一个需要渲染其子项的相机,请不要忘记将其作为子项添加到场景中,然后将显示该相机的子项。

self.camera = gameCamera
self.addChild(gameCamera)

希望通过一个非常简单的解决方案帮助某人避免一个非常常见的错误。

【讨论】:

这应该是公认的答案。解决了我的问题谢谢!

以上是关于SpriteKit - 节点未添加到 SKCameraNode - Swift的主要内容,如果未能解决你的问题,请参考以下文章

touchesEnded:withEvent: 未检测到 SpriteKit 中的顶部节点

未检测到 SpriteKit 碰撞

iOS 7 SpriteKit 游戏 - 保存加载游戏时出错:'尝试将 nil 节点添加到父节点:<SKNode> 名称:'(null)'

复制 SpriteKit 节点位置

Spritekit 节点未从内存中删除

Spritekit场景锚点影响子节点定位