title: SKCameraNode doesn't keep up with moving node
body: <p>I am currently trying to make a "launch(er) game", i.e. a game in the style of Toss the turle, Learn to fly and Burrito Bison using SpriteKit. I've gotten the launch to work using the built-in physics of SpriteKit, but when I try to use an SKCameraNode to follow the main character, it seems like it's always one (or more) step behind which makes the main character "shake" at high velocities.</p>
  
  <p>I've tried both setting the position of the camera using SKAction and with the .position-property, with the same result.</p>
  
  <p>I guess this is because the update of the physics are done at a faster rate than the actual update(), and I've tried searching for information about this but found zilch.</p>
  
  <p>Function for "launching" the main character:</p>
  
  <pre><code>func touchStopped(touchPoint: CGPoint) {
      if !inAir {
          arrow.removeFromParent()
          inAir = true
  
          mainCharNode.physicsBody = SKPhysicsBody(circleOfRadius: mainCharNode.size.width/2)
          mainCharNode.physicsBody?.mass = mainChar.mass
          mainCharNode.physicsBody?.restitution = mainChar.restitution
          mainCharNode.physicsBody?.linearDamping = mainChar.airResistance
          mainCharNode.physicsBody?.velocity = CGVectorMake(touchPoint.x*2, touchPoint.y)
          mainCharNode.physicsBody?.categoryBitMask = mainCategory
          mainCharNode.physicsBody?.collisionBitMask = groundCategory
      } else {
          mainCharNode.physicsBody?.applyImpulse(CGVectorMake(10000, 10000))
      }
  }
  </code></pre>
  
  <p>Update()-function:</p>
  
  <pre><code>override func update(currentTime: CFTimeInterval) {
      if lastUpdateTime &gt; 0 {
          dt = currentTime - lastUpdateTime
      } else {
          dt = 0
      }
      lastUpdateTime = currentTime
  
      if mainCharNode.position.x &gt; 1000 {
          let moveCamera = SKAction.moveTo(CGPoint(x: mainCharNode.position.x, y: cameraNode.position.y), duration: dt)
          cameraNode.runAction(moveCamera)
      }
      if(inAir &amp;&amp; !gameOver) {
          distance += (mainCharNode.physicsBody?.velocity.dx)!*CGFloat(dt)
          if(mainCharNode.physicsBody?.velocity == CGVector(dx: 0,dy: 0)) {
               gameOver = true
               mainCharNode.physicsBody?.dynamic = false
          }
      }
  }
  </code></pre>
  
  <p><a href="https://github.com/CalleLundstedt/LauncherGame" rel="nofollow">https://github.com/CalleLundstedt/LauncherGame</a> here is the full project on github.</p>