斯威夫特:当他跳跃时让相机跟随玩家

时间:2016-07-15 05:11:09

标签: ios swift sprite-kit

我正在建立一个平台游戏,我想让摄像机(如果可能的话,顺利地)跟随玩家,当他跳跃。但如果玩家处于游戏的较低位置,我不希望它发生。

我已经有一个名为sceneLower的var,它是场景的较低位置,我有这个代码(不完整):

var cameraOk = false;
var cameraMoving = false
func moveCamera(position: CGFloat = 0, toPlayer: Bool = false) {
    if !self.cameraOk {
        cameraMoving = true
        let action = SKAction.moveToY((toPlayer ? Player.position.y + 100 : position), duration: 0.6)
        //SKAction.moveBy(CGVector(dx: 0, dy: by), duration: 0.1)
        self.cam.runAction(SKAction.sequence([action, SKAction.runBlock({ 
            self.cameraOk = true
            self.cameraMoving = false
        })]))
    }
}

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


    if (Player.position.y > sceneLower + self.frame.height / 2) {
        if !cameraOk {
            moveCamera(toPlayer: true)
        }
        if (!cameraMoving) {
            self.cam.position.y = Player.position.y + 100
            cameraOk = true
        }
    } else {
        if (!cameraMoving) {
            moveCamera(cameraInitPosition)
        }
    }

我希望相机只有在他处于场景的中高位置时跟随播放器,如果他回到较低位置,我希望相机跟随他。我不知道如何实现这一目标。

如果您有任何问题,请发表评论。

2 个答案:

答案 0 :(得分:1)

if (!cameraMoving) {
    moveCamera(cameraInitPosition)
} 

如果您将其更改为:

,该怎么办?
if (cam.position != cameraInitPosition) {
     moveCamera(cameraInitPosition)
}

答案 1 :(得分:0)

这是此问题的伪代码。

if playerInJumpingState {
camera.position += player.deltaPosition
}

此处,只有当玩家处于跳跃动画状态时,playerInJumpingState才为真。

然后,你要做的是在帧(前一帧和当前帧)之间添加玩家位置的差异,即deltaPosition到相机的位置。这样,相机将在他/她跳跃时跟随玩家。

注意:当他重新回到地面时,不要忘记将playerInJumpingState设置为false。

亲切的问候,
Suman Adhikari