void SetCameraConstraints(SKCameraNode camera, SKSpriteNode sprite) { // Constrain the camera to the player var zeroRange = new SKRange(0, 0); SKConstraint playerConstraint = SKConstraint.CreateDistance(zeroRange, sprite); var scaledSize = new CGSize(Size.Width * camera.XScale, Size.Height * camera.YScale); var contentRect = mapNode.CalculateAccumulatedFrame(); contentRect = new CGRect(contentRect.X, contentRect.Y, contentRect.Width, contentRect.Height + 300); nfloat xInset = (nfloat)Math.Min((scaledSize.Width / 2.0) + 10, contentRect.Width / 2.0); nfloat yInset = (nfloat)Math.Min((scaledSize.Height / 2.0) + 10, contentRect.Height / 2.0); var insetRect = contentRect.Inset(xInset, yInset); var xRange = new SKRange(insetRect.GetMinX(), insetRect.GetMaxX()); var yRange = new SKRange(insetRect.GetMinY(), insetRect.GetMaxY()); var levelEdgeConstraint = SKConstraint.CreateRestriction(xRange, yRange); levelEdgeConstraint.ReferenceNode = this; camera.Constraints = new[] { playerConstraint, levelEdgeConstraint }; }