2017-09-22 43 views
1

当时我使用SKConstraint.positionX(rangex, y: rangey)将我的SKCameraNode限制在我创建的游戏板中。这很好,因为当你碰到边界时就没有口吃。但是我目前的方法来限制相机的比例,因为它在经过并回击时撞到了边界。Swift:SKConstraint用于缩放吗? (或相当于)口吃

@objc func zoomedView(_ sender:UIPinchGestureRecognizer) { 
     if newCamera.xScale > 0.148{ 
      let pinch = SKAction.scale(by: 1/sender.scale, duration: 0.0) 
      newCamera.run(pinch) 
      sender.scale = 1.0 
     } else {newCamera.setScale(0.148)} 
    } 

是否有(或同等)的SKConstraint这是一个更好的办法来制止这种口吃?谢谢:)

+0

听起来令人沮丧...没有你的帧率下降实际?这是在模拟器上还是在设备上? – Fluidity

+0

@Fluidity这不是丢失帧率,它发生是因为我可以缩小边界,然后重新设置,所以每次调用函数都会因为pinchgesture可以越过边界,所以会在下一次重置它。 – Skidushe

+0

@流利性我唯一想到的就是它不在绘制循环中,只有当函数被调用时,所以如果我把它放在绘制循环中,它可能工作,但我没有时间去测试。 – Skidushe

回答

0

没有直接的SKConstraint相当于规模,但是你遇到口吃的原因是当你越过界限时,它会在下次调用函数时对齐,而不是在渲染帧之前,所以理论上你可以瞬间大幅放大,并保持在那里直到你再次激活缩放功能。

创建等价物的一种方法是将代码检查在渲染循环中比例是否大于x,如here所示。 RenderLoop Diagram

所以,如果你检查的最后一刻:

override func didFinishUpdate() { 
    if newCamera.xScale < 0.148{ 
     newCamera.setScale(0.148) 
    } else if newCamera.xScale > 10{ 
     newCamera.setScale(10) 
    } 
}