Swift:使控制按钮不随相机移动

时间:2016-02-11 22:52:53

标签: ios swift

我正在建立一个平台游戏,当他走路时我让相机跟随玩家:

let cam = SKCameraNode()

override func didMoveToView(view: SKView) {
    self.camera = cam
    ...
}

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */

    cam.position = Player.player.position
    ...

但是,当相机移动时,控制按钮也会移动 enter image description here

如何使控制按钮保持静止?

3 个答案:

答案 0 :(得分:12)

请参阅SKCameraNode docs

中的此说明
  

相机的后代始终相对于相机节点的原点进行渲染,而不会将相机的缩放或旋转应用于它们。例如,如果您的游戏想要在游戏玩法之上显示分数或其他数据,则渲染这些元素的节点应该是当前相机节点的后代。

如果您希望HUD元素在相机移动/缩放/旋转时相对于屏幕保持固定,请将它们作为相机的子节点。

顺便说一句,您不需要在每let constraint = SKConstraint.distance(SKRange(constantValue: 0), toNode: player) camera.constraints = [ constraint ] 更改相机的位置。相反,只需约束相机的位置以匹配玩家的位置:

{{1}}

然后,SpriteKit会自动将相机保持在播放器的中央位置,而无需任何每帧工作。您甚至可以添加多个约束 - 例如,跟随播放器,但不要让相机太靠近世界边缘(并显示空白区域)。

答案 1 :(得分:1)

将按钮作为子项添加到相机中,例如cam.addchild(yourButton)

答案 2 :(得分:0)

根据rickster的回答,我做出了这些限制,即即使玩家跳跃,相机也只能水平移动。添加它们的顺序很重要。如果有人发现它们有用:

Swift 4.2

let camera = SKCameraNode()
scene.addChild(camera)
camera.constraints = [SKConstraint.distance(SKRange(upperLimit: 200), to: player),
                      SKConstraint.positionY(SKRange(constantValue: 0))]