SKCameraNode工作很奇怪

时间:2017-02-10 18:31:43

标签: swift sprite-kit

我正在尝试创建一个简单的SpriteKit游戏。我有一个从屏幕底部中心开始的播放器。 我添加到我的GameScene相机跟随播放器,但它不起作用。当我用这段代码运行它时:

class GameScene: SKScene {
    let mPlayer = Player(circleOfRadius: 45, fillColor: myColors.blue, strokeColor: myColors.red)
    let cameraNode = SKCameraNode()

    override func didMove(to view: SKView) {
        setup()
    }

    override func update(_ currentTime: TimeInterval) {
        // Called before each frame is rendered
        moveCamera()
        Player.movePlayerUp(mPlayer: mPlayer)
    }

    func setup(){
        mPlayer.position = CGPoint(x: self.frame.midX - PLAYER_WIDTH, y: self.frame.minY + PLAYER_HEIGHT)

        self.camera?.position = mPlayer.position

        self.camera = cameraNode
        self.addChild(cameraNode)
        self.addChild(mPlayer)
    }

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch in touches{
            let location = touch.location(in: self)
            mPlayer.run(SKAction.moveTo(x: location.x, duration: 0.1))
        }
    }

    func moveCamera(){
        let moveAction = SKAction.moveTo(y: mPlayer.position.y, duration: 0.1)
        cameraNode.run(moveAction)
    }
}

玩家从底部开始并立即移动到屏幕中心,如下图所示:enter image description here

如何让相机从一开始就跟随播放器并随之移动到顶部? 希望我的问题很明确,并对图片的大小表示抱歉。

1 个答案:

答案 0 :(得分:0)

此代码适用于空Xcode项目。您可能认为这不是因为您的背景图像是1种颜色而您只是简单地移动了播放器。

同样在你的更新方法中,你设置将玩家不断移动到中间,这是不必要的。

尝试在背景中添加一些条纹,以便更容易看到你是否移动,然后将此代码添加到更新方法中,慢慢地移动播放器。

let action = SKAction.move(by: CGVector(dx: 0, dy: 5), duration: 1)
mPlayer.run(action)

您将看到相机正确跟随播放器。

如果您需要以不同的方式将相机对准播放器,例如y轴,则只需增加/减少相机的y位置。

 let moveAction = SKAction.moveTo(y: mPlayer.position.y + 200, duration: 0.1)
 cameraNode.run(moveAction)

希望这有帮助