2017-02-10 81 views
0

我想创建一个简单的SpriteKit游戏。我有一个从屏幕底部中心开始的玩家。 我加入了我的GameScene相机跟随播放器,但它不起作用。当我使用此代码运行:SKCameraNode奇怪的工作

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

我怎样才能让相机跟随玩家从一开始就移动到顶端? 希望我的问题很清楚,并为图片的大小感到抱歉。

回答

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) 

希望这有助于

+0

我尝试添加你的代码,但没有似乎是不同的。如果相机正在移动,为什么背景不会随着播放器向上移动而从底部缓慢“消失”? – swiftnewbie

+0

它正在为我工​​作。我将你的代码复制到一个新的游戏项目中,并在背景中添加了一些条纹并改变了移动方法。一切工作正常。您的背景是图像还是您设置了场景背景颜色? – crashoverride777

+0

它是背景颜色。它似乎工作,但我希望屏幕底部随着播放器上升而“消失”。 – swiftnewbie