【问题标题】:Swift: Make control buttons not move with cameraSwift:使控制按钮不随相机移动
【发布时间】:2019-01-18 18:51:18
【问题描述】:

我正在构建一个平台游戏,我让相机在玩家行走时跟随玩家:

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

但是,当相机移动时,控制按钮也会移动

我应该怎么做才能使控制按钮保持静止?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    SKCameraNode docs中查看此注释:

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

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

    顺便说一句,您不需要在每个update() 上更改相机的位置。相反,只需约束相机的位置以匹配玩家的位置:

    let constraint = SKConstraint.distance(SKRange(constantValue: 0), toNode: player)
    camera.constraints = [ constraint ]
    

    然后,SpriteKit 将自动将相机保持在播放器的中心,而无需您进行任何每帧工作。您甚至可以添加多个约束——例如,跟随玩家,但要防止相机过于靠近世界边缘(并显示空白区域)。

    【讨论】:

    • 添加约束不起作用......当我将按钮添加为子按钮时,它们消失了
    • nvm,我只是忘了添加摄像头孩子...顺便说一句,有没有办法让这个约束只水平跟随?
    • 让我猜猜:你的玩家可以跳,你不想让镜头跟着他跳? 1) SKRange 你传递给一个约束可能有一些松弛。 2) 结合位置约束和referenceNode 属性来约束相对于某个节点的位置。 3)您可以有多个约束。拿这些点做一些实验。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      斯威夫特 4.2

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

      【讨论】:

        猜你喜欢
        • 2015-11-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2020-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多